{"id":15929344,"url":"https://github.com/circuitsetup/sid_old","last_synced_at":"2026-02-14T13:33:35.556Z","repository":{"id":210817753,"uuid":"693694388","full_name":"CircuitSetup/SID_old","owner":"CircuitSetup","description":"Firmware for CircuitSetup's Status Indicator Display (SID) from Back to the Future","archived":false,"fork":false,"pushed_at":"2024-07-15T18:34:19.000Z","size":2899,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-05T13:51:16.670Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":false,"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/CircuitSetup.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-19T14:23:29.000Z","updated_at":"2025-10-29T02:15:21.000Z","dependencies_parsed_at":"2024-08-05T23:04:10.638Z","dependency_job_id":"2d10023b-d85d-4eeb-9be6-8d4a453407af","html_url":"https://github.com/CircuitSetup/SID_old","commit_stats":null,"previous_names":["circuitsetup/sid"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CircuitSetup/SID_old","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircuitSetup%2FSID_old","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircuitSetup%2FSID_old/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircuitSetup%2FSID_old/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircuitSetup%2FSID_old/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CircuitSetup","download_url":"https://codeload.github.com/CircuitSetup/SID_old/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircuitSetup%2FSID_old/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29444752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T12:43:28.304Z","status":"ssl_error","status_checked_at":"2026-02-14T12:43:14.160Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-10-07T00:03:31.215Z","updated_at":"2026-02-14T13:33:35.532Z","avatar_url":"https://github.com/CircuitSetup.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firmware for Status Indicator Display (SID)\n\nThis repository holds the most current firmware for CircuitSetup's magnificent [SID](https://circuitsetup.us/product/delorean-time-machine-status-indicator-display-sid/). The SID, also known as \"Field Containment System Display\", is an important part of Doc Brown's time machine in the \"Back to the Future\" movies.\n\nThe hardware is available [here](https://circuitsetup.us/product/delorean-time-machine-status-indicator-display-sid/).\n\n![mysid](https://github.com/realA10001986/SID/assets/76924199/cdd8f609-1248-41f2-92cc-0489fe0397bf)\n\nFeatures include\n- various idle patterns\n- [Time Travel](#time-travel) function, triggered by button, [Time Circuits Display](https://tcd.backtothefutu.re) or via [MQTT](#home-assistant--mqtt)\n- [IR remote controlled](#ir-remote-control); can learn keys from third-party remote\n- Spectrum Analyzer mode via built-in microphone\n- Advanced network-accessible [Config Portal](#the-config-portal) for setup with mDNS support for easy access (http://sid.local, hostname configurable)\n- Wireless communication with [Time Circuits Display](https://tcd.backtothefutu.re) (\"[BTTF-Network](#bttf-network-bttfn)\"); used for synchonized time travels, GPS-speed adapted patterns, alarm, night mode, fake power and remote control through TCD keypad\n- [Home Assistant](#home-assistant--mqtt) (MQTT 3.1.1) support\n- [*Siddly*](#siddly) and [*Snake*](#snake) games\n- [SD card](#sd-card) support\n\n## Installation\n\nThere are different alternative ways to install this firmware:\n\n1) If a previous version of the SID firmware was installed on your device, you can upload the provided pre-compiled binary to update to the current version: Enter the [Config Portal](#the-config-portal), click on \"Update\" and select the pre-compiled binary file provided in this repository (\"install/sid-A10001986.ino.nodemcu-32s.bin\").\n\n2) Using the Arduino IDE or PlatformIO: Download the sketch source code, all required libraries, compile and upload it. This method is the one for fresh ESP32 boards and/or folks familiar with the programming tool chain. Detailed build information is in [sid-A10001986.ino](https://github.com/realA10001986/SID/blob/main/sid-A10001986/sid-A10001986.ino).\n\n *Important: After a firmware update, a \"wait\" symbol (hourglass) might be shown for up to a minute after reboot. Do NOT unplug the device during this time.*\n\n## Short summary of first steps\n\nA good first step would be to establish access to the Config Portal in order to configure your SID.\n\nAs long as the device is unconfigured, as is the case with a brand new SID, or later if it for some reason fails to connect to a configured WiFi network, it starts in \"access point\" mode, i.e. it creates a WiFi network of its own named \"SID-AP\". This is called \"Access Point mode\", or \"AP-mode\".\n\n- Power up the device and wait until the startup sequence has completed.\n- Connect your computer or handheld device to the WiFi network \"SID-AP\".\n- Navigate your browser to http://sid.local or http://192.168.4.1 to enter the Config Portal.\n \nIf you want your SID to connect to your WiFi network, click on \"Configure WiFi\". The bare minimum is to select an SSID (WiFi network name) and a WiFi password. \n\nNote that the device requests an IP address via DHCP, unless you entered valid data in the fields for static IP addresses (IP, gateway, netmask, DNS). \n\nAfter saving the WiFi network settings, the device reboots and tries to connect to your configured WiFi network. If that fails, it will again start in access point mode.\n\nIf the device is inaccessible as a result of wrong static IPs, wait until the SID has completed its startup sequence, then type \\*123456OK on the IR remote; static IP data will be deleted and the device will return to DHCP after a reboot.\n\nIf you have your SID, along with a Time Circuits Display, mounted in a car, see also [here](#car-setup).\n\n### The Config Portal\n\nThe Config Portal is accessible exclusively through WiFi. As outlined above, if the device is not connected to a WiFi network, it creates its own WiFi network (named \"SID-AP\"), to which your WiFi-enabled hand held device or computer first needs to connect in order to access the Config Portal.\n\nIf the operating system on your handheld or computer supports Bonjour (a.k.a. \"mDNS\"), you can enter the Config Portal by directing your browser to http://sid.local. (mDNS is supported on Windows 10 version TH2 (1511) [other sources say 1703] and later, Android 13 and later, MacOS, iOS)\n\nIf that fails, the way to enter the Config Portal depends on whether the device is in access point mode or not. \n- If it is in access point mode (and your handheld/computer is connected to the WiFi network \"SID-AP\"), navigate your browser to http://192.168.4.1 \n- Otherwise type *90 followed by OK on the remote control; the IP address will be shown on the display.\n\nIn the main menu, click on \"Setup\" to configure your SID.\n\n| ![The Config Portal](https://github.com/realA10001986/SID/assets/76924199/8c60dc7a-9d3c-4b65-be3a-411640874c48) |\n|:--:| \n| *The Config Portal's Setup page* |\n\nA full reference of the Config Portal is [here](#appendix-a-the-config-portal).\n\n## Basic Operation\n\nWhen the SID is idle, it shows an idle pattern. There are alternative idle patterns to choose from, selected by *10OK through *14OK on the remote, or via MQTT. If an SD card is inserted, the setting will be persistent accross reboots.\n\nIf the option **_Adhere strictly to movie patterns_** is set (which is the default), the idle patterns #0 through #3 will only use patterns extracted from the movies (plus some interpolations); the same goes for when [GPS speed](#bttf-network-bttfn) is used. If this option is unset, random variations are shown, which is less boring, but also less accurate.\n\nFor ways to trigger a time travel, see [here](#time-travel).\n\nThe main control device is the supplied IR remote control. If a TCD is connected through [BTTF-Network](#bttf-network-bttfn), the SID can also be controlled through the TCD's keypad.\n\n### IR remote control\n\nYour SID has an IR remote control included. This remote works out-of-the-box and needs no setup. \n\n| ![Supplied IR remote control](https://github.com/realA10001986/SID/assets/76924199/2a3bfd40-2a44-4cc0-8209-13468115ae17) |\n|:--:| \n| *The default IR remote control* |\n\nEach time you press a (recognized) key on the remote, an IR feedback LED will briefly light up. This LED is located at the bottom of the board.\n\n### IR learning\n\nYour SID can learn the codes of another IR remote control. Most remotes with a carrier signal of 38kHz (which most IR remotes use) will work. However, some remote controls, expecially ones for TVs, send keys repeatedly and/or send different codes alternately. If you had the SID learn a remote and the keys are not (always) recognized afterwards or appear to the pressed repeatedly while held, that remote is of that type and cannot be used.\n\nFirst, go to the Config Portal, uncheck **_TCD connected by wire_** on the Setup page and save. The SID reboots. Afterwards, to start the learning process, hold the Time Travel button for a few seconds, until the displays shows \"GO\" followed by \"0\". Then press \"0\" on your remote, which the SID will visually acknowledge by displaying the next key to press. Then press \"1\", wait for the acknowledgement, and so on. Enter your keys in the following order:\n\n```0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - * - # - Arrow up - Arrow down - Arrow left - Arrow right - OK``` \n\nIf your remote control lacks the \\* (starts command sequence) and \\# (aborts command sequence) keys, you can use any other key, of course. \\* could be eg. \"menu\" or \"setup\", \\# could be \"exit\" or \"return\".\n\nIf no key is pressed for 10 seconds, the learning process aborts, as does briefly pressing the Time Travel button. In thoses cases, the keys already learned are forgotten and nothing is saved.\n\nTo make the SID forget a learned IR remote control, type *654321 followed by OK.\n\n### Locking IR control\n\nYou can have your SID ignore IR commands from any IR remote control (be it the default supplied one, be it one you had the SID learn) by entering *71 followed by OK. After this sequence the SID will ignore all IR commands until *71OK is entered again. The purpose of this function is to enable you to use the same IR control for your SID and other props (such as Flux Capacitor).\n\nNote that the status of the IR lock is saved 10 seconds after its last change, and is persistent accross reboots.\n\nIn order to only disable the supplied IR remote control, check the option **_Disable supplied IR remote control_** in the [Config Portal](#-disable-supplied-ir-remote-control). In that case, any learned remote will still work.\n\n### Remote control reference\n\n\u003ctable\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\" colspan=\"3\"\u003eSingle key actions\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e1\u003cbr\u003eGames: Quit\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e2\u003cbr\u003e-\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e3\u003cbr\u003eGames: New game\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e4\u003cbr\u003e-\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e5\u003cbr\u003e-\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e6\u003cbr\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e7\u003cbr\u003e-\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e8\u003cbr\u003e-\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e9\u003cbr\u003eGames: Pause\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e*\u003cbr\u003eStart command sequence\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e0\u003cbr\u003e\u003ca href=\"#time-travel\"\u003eTime Travel\u003c/a\u003e\u003cbr\u003eSiddly: Fall down\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e#\u003cbr\u003eAbort command sequence\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\u0026#8593;\u003cbr\u003eIncrease Brightness\u003cbr\u003eSiddly: Rotate\u003cbr\u003eSnake: Up\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e\u0026#8592;\u003cbr\u003eGames: Left\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eOK\u003cbr\u003eExecute command\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\u0026#8594;\u003cbr\u003eGames: Right\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\u0026#8595;\u003cbr\u003eDecrease Brightness\u003cbr\u003eGames: Down\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\" colspan=\"3\"\u003eSpecial sequences\u003cbr\u003e(\u0026#9166; = OK key)\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\u003ctd\u003eFunction\u003c/td\u003e\u003ctd\u003eCode on IR\u003c/td\u003e\u003ctd\u003eCode on TCD\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDefault idle pattern\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*10\u0026#9166;\u003c/td\u003e\u003ctd\u003e6010\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eIdle pattern 1\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*11\u0026#9166;\u003c/td\u003e\u003ctd\u003e6011\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eIdle pattern 2\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*12\u0026#9166;\u003c/td\u003e\u003ctd\u003e6012\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eIdle pattern 3\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*13\u0026#9166;\u003c/td\u003e\u003ctd\u003e6013\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eIdle pattern 4\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*14\u0026#9166;\u003c/td\u003e\u003ctd\u003e6014\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eSwitch to idle mode\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*20\u0026#9166;\u003c/td\u003e\u003ctd\u003e6020\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eStart Spectrum Analyzer\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*21\u0026#9166;\u003c/td\u003e\u003ctd\u003e6021\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eStart Siddly game\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*22\u0026#9166;\u003c/td\u003e\u003ctd\u003e6022\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eStart Snake game\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*23\u0026#9166;\u003c/td\u003e\u003ctd\u003e6023\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eEnable/disable \"\u003ca href=\"#-adhere-strictly-to-movie-patterns\"\u003estrictly movie patterns\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*50\u0026#9166;\u003c/td\u003e\u003ctd\u003e6050\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eEnable/disable peaks in Spectrum Analyzer\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*51\u0026#9166;\u003c/td\u003e\u003ctd\u003e6051\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#locking-ir-control\"\u003eDisable/Enable\u003c/a\u003e IR remote commands\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*71\u0026#9166;\u003c/td\u003e\u003ctd\u003e6071\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDisplay current IP address\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*90\u0026#9166;\u003c/td\u003e\u003ctd\u003e6090\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eReboot the device\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*64738\u0026#9166;\u003c/td\u003e\u003ctd\u003e6064738\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDelete static IP address\u003cbr\u003eand WiFi-AP password\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*123456\u0026#9166;\u003c/td\u003e\u003ctd\u003e6123456\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDelete learned IR remote control\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e*654321\u0026#9166;\u003c/td\u003e\u003ctd\u003e6654321\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n[Here](https://github.com/realA10001986/SID/blob/main/CheatSheet.pdf) is a cheat sheet for printing or screen-use. (Note that MacOS' preview application has a bug that scrambles the links in the document. Acrobat Reader does it correctly.)\n\n## Time travel\n\nTo travel through time, type \"0\" on the remote control. The SID will play its time travel sequence.\n\nYou can also connect a physical button to your SID; the button must shorten \"TT\" and \"3.3V\" on the \"Time Travel\" connector. Pressing this button briefly will trigger a time travel.\n\nOther ways of triggering a time travel are available if a [Time Circuits Display](#connecting-a-time-circuits-display) is connected.\n\n## Spectrum Analyzer\n\nThe spectrum analyzer (or rather: frequency-separated vu meter) works through a built-in microphone. This microphone is located behind the right hand side center hole of the enclosure.\n\nSticky peaks are optional, they can be switched on/off in the Config Portal and by typing *51 followed by OK on the remote.\n\n## Games\n\n### Siddly\n\nSiddly is a simple game where puzzle pieces of various shapes fall down from the top. You can slide them left and right, as well as rotate them while they are falling. When the piece lands at the bottom, a new piece will appear at the top and start falling down. If a line at the bottom is completely filled with fallen pieces or parts thereof, that line will be cleared, and everything piled on top of that line will move down. The target is to keep the pile at the bottom as low as possible; the game ends when the pile is as high as the screen and no new piece has room to appear. I think you get the idea. Note that the red LEDs at the top are not part of the playfield (but show a level-progress bar instead), the field only covers the yellow and green LEDs, and that simularities of Siddly with computer games, especially older ones, exist only in your imagination.\n\n### Snake\n\nSnakes like apples (at least so I have heard). You control a snake that feels a profound urge to eat apples. After each eaten apple, the snake grows, and a new apple appears. Unfortunately, snakes don't like to hit their heads, so you need to watch out that the snake's head doesn't collide with its body.\n\n## SD card\n\nPreface note on SD cards: For unknown reasons, some SD cards simply do not work with this device. For instance, I had no luck with Sandisk Ultra 32GB and  \"Intenso\" cards. If your SD card is not recognized, check if it is formatted in FAT32 format (not exFAT!). Also, the size must not exceed 32GB (as larger cards cannot be formatted with FAT32). I am currently using Transcend SDHC 4GB cards and those work fine.\n\nThe SD card is used for saving secondary settings, in order to avoid flash wear on the SID's ESP32. The chosen idle pattern (*1x) is only stored on SD, so for it to be persistent accross reboots, an SD card is required. \n\nNote that the SD card must be inserted before powering up the device. It is not recognized if inserted while the SID is running. Furthermore, do not remove the SD card while the device is powered.\n\n## Connecting a Time Circuits Display\n\n### Connecting a TCD by wire\n\nConnect GND and GPIO on the SID's \"Time Travel\" connector to the TCD like in the table below:\n\n\u003ctable\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003eSID:\u003cbr\u003e\"Time Travel\" connector\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eTCD control board 1.2\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eTCD control board 1.3\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd align=\"center\"\u003eGND\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eGND of \"IO13\" connector\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eGND on \"Time Travel\" connector\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"center\"\u003eTT\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eIO13 of \"IO13\" connector\u003c/td\u003e\n     \u003ctd align=\"center\"\u003eTT OUT on \"Time Travel\" connector\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nNext, head to the Config Portal and set the ooption **_TCD connected by wire_**. On the TCD, the option \"Control props connected by wire\" must be set.\n\nNote that a wired connection only allows for synchronized time travel sequences, no other communication takes place. Therefore I strongly recommend a wireless BTTFN connection, see immediately below.\n\n### BTTF-Network (\"BTTFN\")\n\nThe TCD can communicate with the SID wirelessly, via WiFi. It can send out information about a time travel and an alarm, and the SID queries the TCD for speed and some other data. Furthermore, the TCD's keypad can be used to remote-control the SID.\n\n![BTTFN connection](https://github.com/realA10001986/SID/assets/76924199/404e4dd5-ac31-4ca4-b6a1-c8084d3a82e0)\n\nIn order to connect your SID to the TCD using BTTFN, just enter the TCD's IP address or hostname in the **_IP address or hostname of TCD_** field in the SID's Config Portal. On the TCD, no special configuration is required. Note that you need TCD firmware 2.9.1 or later for using a hostname; previous versions only work with an IP address.\n\nAfterwards, the SID and the TCD can communicate wirelessly and \n- play time travel sequences in sync,\n- both play an alarm-sequence when the TCD's alarm occurs,\n- the SID can be remote controlled through the TCD's keypad (command codes 6xxx),\n- the SID queries the TCD for GPS speed if desired to adapt its idle pattern to GPS speed,\n- the SID queries the TCD for fake power and night mode, in order to react accordingly if so configured.\n\nYou can use BTTF-Network and MQTT at the same time, see immediately below.\n\n## Home Assistant / MQTT\n\nThe SID supports the MQTT protocol version 3.1.1 for the following features:\n\n### Control the SID via MQTT\n\nThe SID can - to a some extent - be controlled through messages sent to topic **bttf/sid/cmd**. Support commands are\n- TIMETRAVEL: Start a [time travel](#time-travel)\n- IDLE: Switch to idle mode\n- SA: Start spectrum analyzer\n- IDLE_0, IDLE_1, IDLE_2, IDLE_3, IDLE_4: Select idle pattern\n\n### Receive commands from Time Circuits Display\n\nIf both TCD and SID are connected to the same broker, and the option **_Send event notifications_** is checked on the TCD's side, the SID will receive information on time travel and alarm and play their sequences in sync with the TCD. Unlike BTTFN, however, no other communication takes place.\n\n![MQTT connection](https://github.com/realA10001986/SID/assets/76924199/4a7f3c63-91cf-4206-af36-ab39c28dfb3e)\n\nMQTT and BTTFN can co-exist. However, the TCD only sends out time travel and alarm notifications through either MQTT or BTTFN, never both. If you have other MQTT-aware devices listening to the TCD's public topic (bttf/tcd/pub) in order to react to time travel or alarm messages, use MQTT (ie check **_Send event notifications_**). If only BTTFN-aware devices are to be used, uncheck this option to use BTTFN as it has less latency.\n\n### Setup\n\nIn order to connect to a MQTT network, a \"broker\" (such as [mosquitto](https://mosquitto.org/), [EMQ X](https://www.emqx.io/), [Cassandana](https://github.com/mtsoleimani/cassandana), [RabbitMQ](https://www.rabbitmq.com/), [Ejjaberd](https://www.ejabberd.im/), [HiveMQ](https://www.hivemq.com/) to name a few) must be present in your network, and its address needs to be configured in the Config Portal. The broker can be specified either by domain or IP (IP preferred, spares us a DNS call). The default port is 1883. If a different port is to be used, append a \":\" followed by the port number to the domain/IP, such as \"192.168.1.5:1884\". \n\nIf your broker does not allow anonymous logins, a username and password can be specified.\n\nLimitations: MQTT Protocol version 3.1.1; TLS/SSL not supported; \".local\" domains (MDNS) not supported; server/broker must respond to PING (ICMP) echo requests. For proper operation with low latency, it is recommended that the broker is on your local network. \n\n## Car setup\n\nIf your SID, along with a [Time Circuits Display](https://tcd.backtothefutu.re), is mounted in a car, the following network configuration is recommended:\n\n#### TCD\n\n- Run your TCD in [*car mode*](https://tcd.backtothefutu.re/#car-mode);\n- disable WiFi power-saving on the TCD by setting **_WiFi power save timer for AP-mode_** to 0 (zero).\n\n#### SID\n\nEnter the Config Portal on the SID (as described above), click on *Setup* and\n  - enter *192.168.4.1* into the field **_IP address or hostname of TCD_**\n  - check the option **_Follow TCD fake power_** if you have a fake power switch for the TCD (like eg a TFC switch)\n  - click on *Save*.\n\nAfter the SID has restarted, re-enter the SID's Config Portal (while the TCD is powered and in *car mode*) and\n  - click on *Configure WiFi*,\n  - select the TCD's access point name in the list at the top or enter *TCD-AP* into the *SSID* field; if you password-protected your TCD's AP, enter this password in the *password* field. Leave all other fields empty,\n  - click on *Save*.\n\nUsing this setup enables the SID to receive notifications about time travel and alarm wirelessly, and to query the TCD for data. Also, the TCD keypad can be used to remote-control the SID.\n\nIn order to access the SID's Config Portal in your car, connect your hand held or computer to the TCD's WiFi access point (\"TCD-AP\"), and direct your browser to http://sid.local ; if that does not work, go to the TCD's keypad menu, press ENTER until \"BTTFN CLIENTS\" is shown, hold ENTER, and look for the SID's IP address there; then direct your browser to that IP by using the URL http://a.b.c.d (a-d being the IP address displayed on the TCD display).\n\n## Flash Wear\n\nFlash memory has a somewhat limited life-time. It can be written to only between 10.000 and 100.000 times before becoming unreliable. The firmware writes to the internal flash memory when saving settings and other data. Every time you change settings, data is written to flash memory.\n\nIn order to reduce the number of write operations and thereby prolong the life of your SID, it is recommended to use a good-quality SD card and to check **_[\"Save secondary settings on SD\"](#-save-secondary-settings-on-sd)_** in the Config Portal; some settings as well as learned IR codes are then stored on the SD card (which also suffers from wear but is easy to replace). If you want to swap the SD card but preserve your settings, go to the Config Portal while the old SD card is still in place, uncheck the **_Save secondary settings on SD_** option, click on Save and wait until the device has rebooted. You can then power down, swap the SD card and power-up again. Then go to the Config Portal, change the option back on and click on Save. Your settings are now on the new SD card.\n\n## Appendix A: The Config Portal\n\n### Main page\n\n##### \u0026#9654; Configure WiFi\n\nClicking this leads to the WiFi configuration page. On that page, you can connect your SID to your WiFi network by selecting/entering the SSID (WiFi network name) as well as a password (WPA2). By default, the SID requests an IP address via DHCP. However, you can also configure a static IP for the SID by entering the IP, netmask, gateway and DNS server. All four fields must be filled for a valid static IP configuration. If you want to stick to DHCP, leave those four fields empty.\n\nNote that this page has nothing to do with Access Point mode; it is strictly for connecting your SID to an existing WiFi network as a client.\n\n##### \u0026#9654; Setup\n\nThis leads to the [Setup page](#setup-page).\n\n##### \u0026#9654; Restart\n\nThis reboots the SID. No confirmation dialog is displayed.\n\n##### \u0026#9654; Update\n\nThis leads to the firmware update page. You can select a locally stored firmware image file to upload (such as the ones published here in the install/ folder).\n\n##### \u0026#9654; Erase WiFi Config\n\nClicking this (and saying \"yes\" in the confirmation dialog) erases the WiFi configuration (WiFi network and password) and reboots the device; it will restart in \"access point\" mode. See [here](#short-summary-of-first-steps).\n\n---\n\n### Setup page\n\n#### Basic settings\n\n##### \u0026#9654; Screen saver timer\n\nEnter the number of minutes until the Screen Saver should become active when the SID is idle.\n\nThe Screen Saver, when active, disables all LEDs, until \n- a key on the IR remote control is pressed; if IR is [locked](#locking-ir-control), only the # key deactivates the Screen Saver;\n- the time travel button is briefly pressed (the first press when the screen saver is active will not trigger a time travel),\n- on a connected TCD, a destination date is entered (only if TCD is wirelessly connected) or a time travel event is triggered (also when wired).\n\n#### Hardware configuration settings\n\n##### \u0026#9654; Disable supplied IR remote control\n\nCheck this to disable the supplied remote control; the SID will only accept commands from a learned IR remote (if applicable). \n\nNote that this only disables the supplied remote, unlike [IR locking](#locking-ir-control), where IR commands from any known remote are ignored.\n\n#### Network settings\n\n##### \u0026#9654; Hostname\n\nThe device's hostname in the WiFi network. Defaults to 'sid'. This also is the domain name at which the Config Portal is accessible from a browser in the same local network. The URL of the Config Portal then is http://\u003ci\u003ehostname\u003c/i\u003e.local (the default is http://sid.local)\n\nIf you have more than one SID in your local network, please give them unique hostnames.\n\n##### \u0026#9654; AP Mode: Network name appendix\n\nBy default, if the SID creates a WiFi network of its own (\"AP-mode\"), this network is named \"SID-AP\". In case you have multiple SIDs in your vicinity, you can have a string appended to create a unique network name. If you, for instance, enter \"-ABC\" here, the WiFi network name will be \"SID-AP-ABC\". Characters A-Z, a-z, 0-9 and - are allowed.\n\n##### \u0026#9654; AP Mode: WiFi password\n\nBy default, and if this field is empty, the SID's own WiFi network (\"AP-mode\") will be unprotected. If you want to protect your SID access point, enter your password here. It needs to be 8 characters in length and only characters A-Z, a-z, 0-9 and - are allowed.\n\nIf you forget this password and are thereby locked out of your SID, enter *123456 followed by OK on the IR remote control; this deletes the WiFi password. Then power-down and power-up your SID and the access point will start unprotected.\n\n##### \u0026#9654; WiFi connection attempts\n\nNumber of times the firmware tries to reconnect to a WiFi network, before falling back to AP-mode. See [here](#short-summary-of-first-steps)\n\n##### \u0026#9654; WiFi connection timeout\n\nNumber of seconds before a timeout occurs when connecting to a WiFi network. When a timeout happens, another attempt is made (see immediately above), and if all attempts fail, the device falls back to AP-mode. See [here](#short-summary-of-first-steps)\n\n#### Settings for prop communication/synchronization\n\n##### \u0026#9654; TCD connected by wire\n\nCheck this if you have a Time Circuits Display connected by wire. You can only connect *either* a button *or* the TCD to the \"time travel\" connector on the SID, but not both.\n\nNote that a wired connection only allows for synchronized time travel sequences, no other communication takes place.\n\nAlso note that the process of [learning keys from an IR remote control](#ir-remote-control) requires this option to be unchecked. After learning keys is done, you can, of course, check this option again.\n\nDo NOT check this option if your TCD is connected wirelessly (BTTFN, MQTT).\n\n##### \u0026#9654; TCD signals Time Travel without 5s lead\n\nUsually, the TCD signals a time travel with a 5 seconds lead, in order to give a prop a chance to play an acceletation sequence before the actual time travel takes place. Since this 5 second lead is unique to CircuitSetup props, and people sometimes want to connect third party props to the TCD, the TCD has the option of skipping this 5 seconds lead. That that is the case, and your SID is connected by wire, you need to set this option.\n\nIf your SID is connected wirelessly, this option has no effect.\n\n##### \u0026#9654; IP address or hostname of TCD\n\nIf you want to have your SID to communicate with a Time Circuits Display wirelessly (\"BTTF-Network\"), enter the IP address of the TCD here. Do NOT enter a host name here. If your TCD is running firmware version 2.9.1 or later, you can also enter the TCD's hostname here instead (eg. 'timecircuits').\n\nIf you connect your SID to the TCD's access point (\"TCD-AP\"), the TCD's IP address is 192.168.4.1.\n\n##### \u0026#9654; Adapt to GPS speed\n\nIf your TCD is equipped with a GPS sensor, the SID can adapt its display to current GPS speed. This option selects if GPS speed should be used.\n\n##### \u0026#9654; Follow TCD night-mode\n\nIf this option is checked, and your TCD goes into night mode, the SID will activate the Screen Saver with a very short timeout. \n\n##### \u0026#9654; Follow TCD fake power\n\nIf this option is checked, and your TCD is equipped with a fake power switch, the SID will also fake-power up/down. If fake power is off, no LED is active and the SID will ignore all input from buttons, knobs and the IR control.\n\n#### Visual options\n\n##### \u0026#9654; Adhere strictly to movie patterns\n\nIf this is set, in idle modes 0-3 as well as when using GPS speed, only patterns which were extracted from the movies (plus some interpolations) are shown. If this option is unset, random variations will be shown, which is less accurate, but also less monotonous. Purists will want this option to be set, which is also the default. This option can also be changed by typing *50 followed by OK on the IR remote control.\n\n##### \u0026#9654; Skip time tunnel animation\n\nWhen set, the time travel sequence will not be animated (no flicker, no \"moving bar\"). Purists will want this option to be set; the default is unset.\n\n##### \u0026#9654; Show peaks in Spectrum Analyzer\n\nThis selects the boot-up setting for showing or not showing the peaks in the Spectrum Analyzer. Can be changed anytime by typing *51 followed by OK on the IR remote control.\n\n#### Home Assistant / MQTT settings\n\n##### \u0026#9654; Use Home Assistant (MQTT 3.1.1)\n\nIf checked, the SID will connect to the broker (if configured) and send and receive messages via [MQTT](#home-assistant--mqtt)\n\n##### \u0026#9654; Broker IP[:port] or domain[:port]\n\nThe broker server address. Can be a domain (eg. \"myhome.me\") or an IP address (eg \"192.168.1.5\"). The default port is 1883. If different port is to be used, it can be specified after the domain/IP and a colon \":\", for example: \"192.168.1.5:1884\". Specifiying the IP address is preferred over a domain since the DNS call adds to the network overhead. Note that \".local\" (MDNS) domains are not supported.\n\n##### \u0026#9654; User[:Password]\n\nThe username (and optionally the password) to be used when connecting to the broker. Can be left empty if the broker accepts anonymous logins.\n\n#### Other settings\n\n##### \u0026#9654; Save secondary settings on SD\n\nIf this is checked, secondary settings (brightness, IR lock status, learned IR keys) are stored on the SD card (if one is present). This helps to minimize write operations to the internal flash memory and to prolong the lifetime of your SID. See [Flash Wear](#flash-wear).\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcircuitsetup%2Fsid_old","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcircuitsetup%2Fsid_old","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcircuitsetup%2Fsid_old/lists"}