{"id":18148302,"url":"https://github.com/reala10001986/remote","last_synced_at":"2026-05-09T13:43:55.878Z","repository":{"id":259189574,"uuid":"867486007","full_name":"realA10001986/Remote","owner":"realA10001986","description":"Firmware for Futaba remote control kit (Delorean Time Machine)","archived":false,"fork":false,"pushed_at":"2024-10-24T10:33:15.000Z","size":6415,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-25T02:36:18.736Z","etag":null,"topics":["bttf","circuitsetup","deloreantimemachine","docbrown","dtm","esp32","futaba","mcfly","remote-control","time-machine"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/realA10001986.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":"2024-10-04T06:49:20.000Z","updated_at":"2024-10-24T10:33:19.000Z","dependencies_parsed_at":"2024-10-26T22:41:50.920Z","dependency_job_id":"90de5332-87aa-478e-af28-7c5618128c4a","html_url":"https://github.com/realA10001986/Remote","commit_stats":null,"previous_names":["reala10001986/remote"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realA10001986%2FRemote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realA10001986%2FRemote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realA10001986%2FRemote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realA10001986%2FRemote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/realA10001986","download_url":"https://codeload.github.com/realA10001986/Remote/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247557805,"owners_count":20958047,"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":["bttf","circuitsetup","deloreantimemachine","docbrown","dtm","esp32","futaba","mcfly","remote-control","time-machine"],"created_at":"2024-11-01T23:07:55.489Z","updated_at":"2026-05-09T13:43:55.864Z","avatar_url":"https://github.com/realA10001986.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Remote Control (Delorean Time Machine)\n\nThis [repository](https://remote.out-a-ti.me) holds the most current firmware for CircuitSetup's [Futaba remote control kit](https://circuitsetup.us/product/futaba-remote-stanley-display-wireless-control-kit/), meant mainly for use in combination with a CircuitSetup [Time Circuits Display](https://circuitsetup.us/product/complete-time-circuits-display-kit/) with a connected speedo. Of course, the Remote can also be used stand-alone.\n\nSee [here](FUTABA.md) for information on the hardware (parts, disassembly \u0026 building instructions).\n\n![My Futaba1](img/myfutaba1.jpg)\n![My Futaba2](img/myfutaba2.jpg)\n\n| [![Watch the video](https://img.youtube.com/vi/ADWcsmJ4gok/0.jpg)](https://youtu.be/ADWcsmJ4gok) |\n|:--:|\n| Click to watch the video |\n\n| [![Watch the video](https://img.youtube.com/vi/vgmrB-Drxjg/0.jpg)](https://youtu.be/vgmrB-Drxjg) |\n|:--:|\n| Click to watch the video |\n\nSee it controlling the lights and blinds through Home Assistant:\n\n| [![Watch the video](https://img.youtube.com/vi/SbuL2Bv5uqA/0.jpg)](https://youtu.be/SbuL2Bv5uqA) |\n|:--:|\n| Click to watch the video |\n\nA video of an early proof-of-concept is [here](https://www.facebook.com/61553801874212/videos/1047035620236271/) (note that the hardware shown isn't even in prototype stage).\n\nFirmware features:\n- [Wireless communication](#connecting-a-time-circuits-display) with [Time Circuits Display](https://circuitsetup.us/product/complete-time-circuits-display-kit/); when (fake) powered up by \"ON/OFF\" switch, the Remote will take over speed control on the TCD-connected speedo. \n- Elevator stick on actual Futaba remote control used for throttle control, like in the movie. The throttle can increase or decrease speed, in five steps towards each direction. When the speed on the TCD's speedo reaches 88mph, a time travel is triggered.\n- Optional [coasting](#-coasting-when-throttle-in-neutral), optional [auto-throttle](#-auto-throttle)\n- controlling the Futaba's power LED and battery level meter (static display only, no actual battery level display)\n- Movie-accurate \"Stop\" light and stop switch behavior\n- Movie-accurate sound effects\n- Eight optional \"[User Buttons](#user-buttons)\" for playback of user-provided sound effects and/or sending user-configurable [Home Assistant/MQTT](#home-assistant--mqtt) messages\n- [SD card](#sd-card) support for custom audio files for effects, and music for the Music Player\n- [Music player](#the-music-player): Play mp3 files located on an SD card, controlled by the \"O.O\"/\"RESET\" buttons or [Time Circuits Display](https://circuitsetup.us/product/complete-time-circuits-display-kit/) keypad via BTTFN\n- Advanced network-accessible [Config Portal](#the-config-portal) for setup (http://dtmremote.local)\n- [Home Assistant](#home-assistant--mqtt) (MQTT) support\n- Smart battery monitoring for certain LiPo batteries (requires Control Board 1.6M or \u003e= 1.7)\n- Built-in OTA installer for firmware updates and audio files\n\n\u003eThis [repository](https://remote.out-a-ti.me) is the upstream source for CircuitSetup's releases. The only difference is that both code and documentation [here](https://remote.out-a-ti.me) might be ahead in development.\n\nFor information on updating the firmware on your Remote, see [here](#firmware-installation--firmware-update).\n\n## Initial Configuration\n\n\u003eThe following instructions only need to be followed once, on fresh Remotes. They do not need to be repeated after a firmware update.\n\nThe first step is to establish access to the Remote's configuration web site (\"Config Portal\") in order to configure your device:\n\n- Power up your Remote and wait until it has finished booting.\n- Connect your computer or handheld device to the WiFi network \"REM-AP\".\n- Navigate your browser to http://dtmremote.local or http://192.168.4.1 to enter the Config Portal.\n\n### Connecting to a WiFi network\n\nYour Remote knows two ways of WiFi operation: Either it creates its own WiFi network or it connects to a pre-existing WiFi network.\n\nAs long as your Remote is unconfigured, it creates its own WiFi network named \"REM-AP\". This mode of operation is called \"**Access point mode**\" or **\"AP-mode\"**. In this mode, computers/handhelds can connect to your Remote in order to access the Config Portal, but ways of communication end right here. There is no inter-prop-communication ([BTTFN](#bttf-network-bttfn)) and no [HA/MQTT](#home-assistant--mqtt).\n\n![APmode](img/apmode.png)\n\nIt is ok to leave it in AP-mode, predominantly if used stand-alone. To keep operating your Remote in AP-mode, simply _do not configure_ a WiFi network connection as described below.\n\n\u003cdetails\u003e\n\u003csummary\u003eMore...\u003c/summary\u003e\n\n\u003ePlease do not leave computers/handhelds permanently connected to the Remote in AP-mode. These devices might think they are connected to the internet and therefore hammer your Remote with DNS and HTTP requests which might lead to disruptions.\n\n\u003eIf you wish for your device to remain in AP-mode, please select a suitable WiFi channel on the Config Portal's \"WiFi Configuration\" page. See [here](#-wifi-channel).\n\n\u003e In AP-mode, the SID can switch off WiFi to save power. See [here](#wifi-power-saving-features).\n\n\u003c/details\u003e\n\n#### Home setup with a pre-existing local WiFi network\n\nIn this case, you can connect your Remote to your home WiFi network. This allows for inter-prop-communication ([BTTFN](#bttf-network-bttfn)) and [HA/MQTT](#home-assistant--mqtt).\n\n![STAmode-home](img/stamode-home.png)\n\nClick on \"WiFi Configuration\" and either select a network from the top of the page or enter a WiFi network name (SSID), and enter your WiFi password. After saving the WiFi network settings, your Remote reboots and tries to connect to your selected WiFi network. \n\n\u003cdetails\u003e\n\u003csummary\u003eMore...\u003c/summary\u003e\n\n\u003eIf there are several APs with identical SSID in your area, you can select a specific AP to use by its BSSID (AP's MAC address). You can either manually find out your AP's BSSID and enter it or have it filled out automatically: Click \"Scan for networks\", then \"Show all\". If you click on an AP, its BSSID will be copied into BSSID field in the form below. To see which AP is which, hover over the name to see its BSSID as a tooltip.\n  \n\u003eYour Remote requests an IP address via DHCP, unless you entered valid data in the fields for static IP addresses (IP, gateway, netmask, DNS). If the device is inaccessible as a result of incorrect static IPs, \n\u003e- power-down the device,\n\u003e- hold the Calibration button,\n\u003e- power-up the device (while still holding the Calibration button)\n\u003e- wait until the displays shows a circle animation,\n\u003e- press Button \"O.O\" twice within 10 seconds,\n\u003e- wait until the display shows \"RST\",\n\u003e- then release the Calibration button.\n\u003e\n\u003eThis procedure causes static IP data to be deleted; the device will return to DHCP after a reboot.\n\u003c/details\u003e\n\nIf the Remote fails to connect, it falls back to AP-mode. You can trigger another [connection attempt](#-attempt-re-connection-on-fake-power) by fake-powering it down and up.\n\n#### Places without a WiFi network\n\nIn this case and with no [Time Circuits Display](https://circuitsetup.us/product/complete-time-circuits-display-kit/) at hand, keep your Remote operating in AP-mode.\n\nIf you have a TCD, you can connect your Remote to the TCD's own WiFi network: \n\n![STAmode-car](img/stamode-car.png)\n\nThis setup is meant for cars, but suitable for any place with no WiFi network. See [here](#car-setup) for details.\n\nAfter completing WiFi setup, your Remote is ready for use; you can also continue configuring it to your personal preferences through the Config Portal.\n\n## The Config Portal\n\nThe \"Config Portal\" is the Remote's configuration web site. \n\n| ![The Config Portal](img/cpm.png) |\n|:--:| \n| *The Config Portal's main page* |\n\nIt can be accessed as follows:\n\n#### If Remote is in AP mode\n\n- Connect your computer or handheld device to the WiFi network \"REM-AP\".\n- Navigate your browser to http://dtmremote.local or http://192.168.4.1 to enter the Config Portal.\n- (For proper operation, please disconnect your computer or handheld from REM-AP when you are done with configuring your Remote. These devices can cause high network traffic, resulting in severe performance penalties.)\n\n#### If Remote is connected to a WiFi network\n\n- Connect your handheld/computer to the same (WiFi) network to which your Remote is connected.\n- Navigate your browser to http://dtmremote.local   \u003cdetails\u003e\u003csummary\u003eMore...\u003c/summary\u003e\n\n  \u003eAccessing the Config Portal through this address requires the operating system of your handheld/computer to support Bonjour/mDNS: Windows 10 version TH2     (1511) [other sources say 1703] and later, Android 13 and later; MacOS and iOS since the dawn of time.\n\n  \u003eIf connecting to http://dtmremote.local fails due to a name resolution error, you need to find out the Remote's IP address: Power up and fake-power-up the Remote and hold the Calibration button for 2 seconds. The Remote will display its current IP address (a. - b. - c. - d). Then, on your handheld or computer, navigate to http://a.b.c.d (a.b.c.d being the IP address as displayed on the Remote) in order to enter the Config Portal.\u003c/details\u003e\n\nIn the main menu, click on \"Settings\" to configure your Remote. \n\n| [\u003cimg src=\"img/cps-frag.png\"\u003e](img/cp_setup.png) |\n|:--:| \n| *Click for full screenshot* |\n\nA full reference of the Config Portal is [here](#appendix-a-the-config-portal).\n\n## Basic Operation\n\nAfter [calibration](#calibration), your Remote is ready for use. \n\nIf battery monitoring is available, the battery state (in percent; or \"FUL\") is shown briefly upon (real) power-on.\n\nThe Remote can be operated stand-alone, but is really meant to be (wirelessly) connected to a TCD.\n\nAfter fake-power-on, the Remote's throttle controls the speed displayed on the TCD's Speedo.\n\nFor acceleration, there are two modes: Linear mode and \"movie mode\". In linear mode, acceleration is even over the entire range of 0 to 88mph. In \"movie mode\", the Remote (mostly) accelerates in the same pace as shown in the movie. In this mode, acceleration becomes slower at higher speeds. The mode can be selected in the Config Portal.\n\nWhen the remote hits 88.0mph, the TCD triggers a BTFN-wide time travel; all connected props will play a synchronized time travel sequence. If operated stand-alone, a time travel sequence will be played on the Remote.\n\nAuto-throttle: If this option is checked in the Config Portal, acceleration will continue to run after briefly pushing up the throttle stick and releasing it into neutral. Acceleration is stopped when pulling down the throttle stick or when 88mph is reached.\n\nCoasting: If this feature is enabled through the Config Portal, the Remote will ever so slightly reduce the current speed when the throttle lever is in neutral. Like a car when you put the transmission in neutral or press the clutch.\n\nAll the operation modes described above can also be switched on/off through the [TCD keypad](#tcd-remote-command-reference) or [HA/MQTT](#control-the-remote-via-mqtt).\n\nButtons and switches:\n\n### \"ON/OFF\": Fake power\n\nThe \"ON/OFF\" switch turns the Remote on and off in a sense that it takes over speed control on the TCD when fake-powered on, and hands back speed control when fake-powered off.\n\n\"ON/OFF\" must be a maintained contact.\n\n### \"Stop\"\n\nThe \"Stop\" switch activates the brakes on your virtual Delorean; if the brakes are on, speed changes on the Remote are not followed by the TCD, instead the TCD will count speed down to 0. Upon releasing the brake, the virtual car accelerates up to the speed shown on the Remote, and will then follow its speed changes.\n\n\"Stop\" must be a maintained contact.\n\n### Calibration\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eShort press\u003c/td\u003e\u003ctd\u003eHold (2 secs)\u003cbr\u003e(double-beep)\u003c/td\u003e\u003ctd\u003eHold (6 secs)\u003cbr\u003e(triple-beep)\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eFake-power off\u003c/td\u003e\u003ctd\u003eCalibrate, see below\u003c/td\u003e\u003ctd\u003eCalibration, see below\u003c/td\u003e\u003ctd\u003eToggle \u003ca href=\"#car-setup\"\u003eCar mode\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eFake-power on\u003c/td\u003e\u003ctd\u003eReset speed to 0\u003c/td\u003e\u003ctd\u003eDisplay IP address, battery state(*)\u003c/td\u003e\u003ctd\u003eToggle \u003ca href=\"#car-setup\"\u003eCar mode\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n(* Board version 1.6M or \u003e= 1.7 required; LiPo battery must be properly connected to battery monitor input; battery charge percentage and time-to-empty shown alternately)\n\nThe throttle of the Remote needs calibration:\n\n- Put the \"ON/OFF\" switch in \"OFF\" position.\n- Put the throttle lever in neutral (center) position, press the Calibration button. The display will briefly show \"CAL\" to show acceptance.\n- Hold the Calibration button for \u003e= 2 seconds until a double-beep is emitted, then release the button. Shortly after, \"UP\" will be displayed. Now push the throttle to the up-most position and press the Calibration button. \"DN\" will be displayed.\n- Pull the throttle lever to the bottom-most position and press the Calibration button. The display will clear, calibration is finished.\n\nIf you change power-source (ie a new battery or power via USB to the ESP32), re-calibration is required.\n \nThe Calibration button needs to be a momentary contact.\n\n### Buttons \"O.O\" and \"RESET\"\n\nWhen fake power is on:\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eShort press\u003c/td\u003e\u003ctd\u003eLong press\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton \"O.O\"\u003c/td\u003e\u003ctd\u003ePrepare TT\u003cbr\u003eor\u003cbr\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Previous Song\u003cbr\u003e(depending on \u003ca href=\"#-pressing-oo-when-fake-power-on\"\u003econfiguration\u003c/a\u003e)\u003c/td\u003e\u003ctd\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Play/Stop\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton \"RESET\"\u003c/td\u003e\u003ctd\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Next Song\u003c/td\u003e\u003ctd\u003eToggle Auto-Throttle\u003cbr\u003eor\u003cbr\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Toggle Shuffle\u003cbr\u003e(depending on \u003ca href=\"#-holding-reset-when-fake-power-on\"\u003econfiguration\u003c/a\u003e)\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\nWhen fake power is off, the buttons are used to set up audio volume and display brightness:\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eShort press\u003c/td\u003e\u003ctd\u003eLong press\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton \"O.O\"\u003c/td\u003e\u003ctd\u003eVolume up\u003c/td\u003e\u003ctd\u003eBrightness up\u003cbr\u003eor\u003cbr\u003eTake over TCD Fake-Power control\u003cbr\u003e(depending on \u003ca href=\"#-holding-ooreset-when-fake-power-off\"\u003econfiguration\u003c/a\u003e)\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton \"RESET\"\u003c/td\u003e\u003ctd\u003eVolume down\u003c/td\u003e\u003ctd\u003eBrightness down\u003cbr\u003eor\u003cbr\u003eRelease TCD Fake-Power control\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n[Here](https://github.com/realA10001986/Remote/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### User Buttons\n\nThese buttons are entirely optional. You can install any number of buttons, they only serve the purpose of playing back user-provided sound effects and/or send user-configurable messages to an [MQTT](#home-assistant--mqtt) broker.\n\nSound playback is mapped as follows:\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eShort press\u003c/td\u003e\u003ctd\u003eLong press\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 1\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey1.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey1l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 2\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey2.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey2l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 3\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey3.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey3l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 4\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey4.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey4l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 5\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey5.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey5l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 6\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey6.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey6l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 7\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey7.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey7l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eButton 8\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey8.mp3\u003c/a\u003e\"\u003c/td\u003e\u003ctd\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey8l.mp3\u003c/a\u003e\"\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\nIf a \"button\" is configured as a maintained switch in the Config Portal, keyX will be played on every flip (ON-\u003eOFF, OFF-\u003eON) by default. If the option **_Maintained: Audio on ON only_** is checked for a switch, keyX will only be played when the switch is brought into ON position. This is especially useful for three-position switches where each of the \"ON\" positions is wired to a different \"Button\" on the Control Board. Note that maintained switches cannot trigger play-back of keyXl.\n\nIf the button/switch is pressed/flipped while audio from a previous press/flip of the same button/switch is still playing, play-back will be stopped.\n \n## SD Card\n\n\u003ePreface 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). Transcend, Sandisk Industrial, Verbatim Premium and Samsung Pro Endurance SDHC cards work fine in my experience.\n\nThe SD card, apart from being required for [installing](#sound-pack-installation) of the sound-pack, can be used for custom sound effects, substituting built-in sound effects and for music played back by the [Music player](#the-music-player). Also, it is _strongly recommended_ to store [secondary settings](#-save-secondary-settings-on-sd) on the SD card to minimize [Flash Wear](#flash-wear).\n\nNote that the SD card must be inserted before powering up the device. It is not recognized if inserted while the Remote is running. Furthermore, do not remove the SD card while the device is powered.\n\n### Sound substitution\n\nThe Remote's built-in sound effects can be substituted by your own sound files on a FAT32-formatted SD card. These files will be played back directly from the SD card during operation, so the SD card has to remain in the slot.\n\nYour replacements need to be put in the root (top-most) directory of the SD card, be in mp3 format (128kbps max) and named as follows:\n- \"poweron.mp3\": Played when the Remote is (fake)-powered on.\n- \"brakeon.mp3\": Played when the brake is switched on (= when the \"Stop\" light is switched on).\n- \"alarm.mp3\". Played when the alarm sounds (triggered by a Time Circuits Display via BTTFN or MQTT);\n\n### Additional Custom Sounds\n\nThe firmware supports some additional user-provided sound effects, which it will load from the SD card. If the respective file is present, it will be used. If that file is absent, no sound will be played.\n\n- \"poweroff.mp3\": Played when the Remote is (fake)-powered off.\n- \"brakeoff.mp3\": Played when the brake is switched off.\n- \"key1.mp3\" - \"key9.mp3\": Will be played upon pressing the respective [button](#user-buttons) (except key9), and commands from the [TCD's keypad](#tcd-remote-command-reference) or [HA/MQTT](#control-the-remote-via-mqtt)\n- \"key1l.mp3\" - \"key9l.mp3\": Will be played upon long-pressing the respective [button](#user-buttons) (except key9). Naturally, this only works for momentary buttons, not maintained switches. Those sounds also play on commands from the [TCD's keypad](#tcd-remote-command-reference) or [HA/MQTT](#control-the-remote-via-mqtt).\n\nThose files are not provided here. You can use any mp3, with a bitrate of 128kpbs or less.\n\n### Installing Custom \u0026 Replacement Audio Files\n\nReplacements and custom sounds can either be uploaded through the Config Portal or copied to the SD card using a computer.\n\nUploading through the Config Portal works exactly like [installing the sound-pack](#sound-pack-installation); on the main menu, click \"Update \u0026 Upload\". Afterwards choose one or more mp3 files to upload using the bottom file selector, and click \"UPLOAD\". The firmware will store the uploaded mp3 files on the SD card.\n\nTo delete a file from the SD card, upload a file whose name is prefixed with \"delete-\". For example: To delete \"key3.mp3\" from the SD card, upload a file named \"delete-key3.mp3\"; the file's contents does not matter, so it's easiest to use a newly created empty file. The firmware detects the \"delete-\" part and, instead of storing the uploaded file, it throws it away and deletes \"key3.mp3\" from the SD card.\n\nFor technical reasons, the Remote must reboot after mp3 files are uploaded in this way.\n\nPlease remember that the maximum bitrate for mp3 files is 128kbps. Also note that the uploaded file is stored to the root folder of the SD card, so this way of uploading cannot be used to upload songs for the Music Player. \n\n## The Music Player\n\nThe firmware contains a simple music player to play mp3 files located on the SD card. \n\nTo be recognized, your mp3 files need to be organized in music folders named *music0* through *music9*. The folder number is 0 by default, ie the player starts searching for music in folder *music0*. This folder number can be changed in the Config Portal or through the TCD keypad (705x).\n\nThe names of the audio files must only consist of three-digit numbers, starting at 000.mp3, in consecutive order. No numbers should be left out. Each folder can hold up to 1000 files (000.mp3-999.mp3). *The maximum bitrate is 128kpbs.*\n\nSince manually renaming mp3 files is somewhat cumbersome, the firmware can do this for you - provided you can live with the files being sorted in alphabetical order: Just copy your files with their original filenames to the music folder; upon boot or upon selecting a folder containing such files, they will be renamed following the 3-digit name scheme (as mentioned: in alphabetic order). You can also add files to a music folder later, they will be renamed properly; when you do so, delete the file \"TCD_DONE.TXT\" from the music folder on the SD card so that the firmware knows that something has changed. The renaming process can take a while (11 minutes for 1000 files in bad cases). Mac users are advised to delete the ._ files from the SD before putting it back into the control board as this speeds up the process. _While the renaming is in progress, the Remote's display shows how many files are still left to be processed._\n\nTo start and stop music playback, hold \"O.O\" for 2 seconds. Briefly pressing \"O.O\" jumps to the previous song, pressing \"RESET\" to the next one. (The same can be achieved by entering codes on the TCD's keypad: 7002 = previous song, 7005 = play/stop, 7008 = next song).\n\nBy default, the songs are played in order, starting at 000.mp3, followed by 001.mp3 and so on. Holding \"RESET\" toggles Shuffle mode. Shuffle mode is saved and persistent accross reboots.\n\nSee [here](#buttons-oo-and-reset) and [here](#tcd-remote-command-reference) for a list of controls of the music player.\n\nWhile the music player is playing music, other sound effects might be disabled/muted. The TCD-triggered alarm will, if so configured, interrupt the music player.\n\n## Battery Monitoring\n\nIf a suitable control board is in use, and battery warnings are enabled in the Config Portal, battery state can be monitored, and a warning is issued when the battery is low.\n\nMonitoring can be done through the [Calibration button](#calibration) and the TCD (7091/7092).\n\nThe \"low battery\" warning is given as follows:\n\n- A sound is played once\n- If the Futaba's battery level meter is connected and enabled, it is switched off (= it reads 0).\n- If the Futaba's original power LED is connected and enabled, it blinks.\n- If the power LED is disabled, depending on fake power, either \"BAT\" is displayed periodically or the display blinks periodically.\n\n## Connecting a Time Circuits Display\n\nThe TCD communicates with the Remote wirelessly, via the built-in \"**B**asic-**T**elematics-**T**ransmission-**F**ramework\" (BTTFN) over WiFi. A wired connection is not supported.\n\nThe actual remote controlling is done wirelessly, and the TCD's keypad can be used to remote-control the Remote (to control the Music Player, for instance).\n\n| [![Watch the video](https://img.youtube.com/vi/u9oTVXUIOXA/0.jpg)](https://youtu.be/u9oTVXUIOXA) |\n|:--:|\n| Click to watch the video |\n\nBTTFN requires the props all to be connected to the same network, such as, for example, your home WiFi network, or the TCD acting as access point. BTTFN does not work over the Internet.\n\n![STAmode-home](img/stamode-home.png)\n\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\n![STAmode-car](img/stamode-car.png)\n\n\u003cdetails\u003e\n\u003csummary\u003eMore...\u003c/summary\u003e\n\n\u003eThe term \"WiFi network\" is used for both \"WiFi network\" and \"ip subnet\" here for simplicity reasons. However, for BTTFN communication, the devices must be on the same IP subnet, regardless of how they take part in it: They can be connected to different WiFi networks, if those WiFi networks are part of the same ip subnet.\n\n\u003c/details\u003e\n\nTo connect your Remote to the TCD, just enter the TCD's hostname - usually \"timecircuits\" - in the **_Hostname or IP address of TCD_** field in the Remote's Config Portal. On the TCD, no special configuration is required apart from permitting remote control through keypad command 993.\n  \nAfterwards, the Remote and the TCD can communicate wirelessly and \n- the TCD's speed control is done by the Remote,\n- the Remote can switch [Fake-Power on the TCD](#controlling-tcd-fake-power),\n- both play an alarm-sequence when the TCD's alarm occurs (if so configured),\n- the Remote can be remote controlled through the TCD's keypad (command codes 7xxx; see below),\n- the Remote can - while fake powered off - display the TCD's speed (eg from GPS).\n\nYou can use BTTF-Network and MQTT at the [same time](#receive-commands-from-time-circuits-display).\n\n### TCD remote command reference\n\n\u003ctable\u003e\n   \u003ctr\u003e\u003ctd\u003eFunction\u003c/td\u003e\u003ctd\u003eCode on TCD\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle \"\u003ca href=\"#-movie-like-acceleration\"\u003emovie mode\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003ctd\u003e7060\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle \u003ca href=\"#-display-tcd-speed-when-fake-off\"\u003edisplay of TCD speed while off\u003c/a\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003ctd\u003e7061\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle \u003ca href=\"#-auto-throttle\"\u003eauto-throttle\u003c/a\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003ctd\u003e7062\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle \u003ca href=\"#-coasting-when-throttle-in-neutral\"\u003ecoasting\u003c/a\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003ctd\u003e7063\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eSet volume level (00-19)\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7300\u0026#9166; - 7319\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eEnable / disable click sound\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7350\u0026#9166; / 7351\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eSet brightness level (00-15)\u003c/td\u003e\n     \u003ctd align=\"left\"\u003ctd\u003e7400\u0026#9166; - 7415\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Play/Stop\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7005\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Previous song\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7002\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Next song\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7008\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Select music folder (0-9)\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7050\u0026#9166; - 7059\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Shuffle off\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7222\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Shuffle on\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7555\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e \n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Go to song 0\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7888\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003e\u003ca href=\"#the-music-player\"\u003eMusic Player\u003c/a\u003e: Go to song xxx\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7888xxx\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey1.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7001\u0026#9166; / 7501\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey2.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7502\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey3.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7003\u0026#9166; / 7503\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey4.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7004\u0026#9166; / 7504\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey5.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7505\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey6.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7006\u0026#9166; / 7506\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey7.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7007\u0026#9166; / 7507\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey8.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7502\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekey9.mp3\u003c/a\u003e\"\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7009\u0026#9166; / 7509\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003ePlay \"\u003ca href=\"#additional-custom-sounds\"\u003ekeyXl.mp3\u003c/a\u003e\" (X=1-9)\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7511\u0026#9166; - 7519\u0026#9166;\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\"\u003e7090\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e   \n  \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDisplay battery charge percentage\u003csup\u003e1\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7091\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e   \n  \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDisplay battery \"Time to empty\"\u003csup\u003e1\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7092\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e   \n  \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDisplay battery voltage\u003csup\u003e1\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7093\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e \n   \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle \u003ca href=\"#controlling-tcd-fake-power\"\u003eFake-Power control\u003c/a\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7096\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDisable \u003ca href=\"#car-setup\"\u003eCar mode\u003c/a\u003e\u003csup\u003e2\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7990\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eEnable \u003ca href=\"#car-setup\"\u003eCar mode\u003c/a\u003e\u003csup\u003e2\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7991\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eReboot the device\u003csup\u003e2\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7064738\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eToggle firmware update signals at power-up\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7053281\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n     \u003ctd align=\"left\"\u003eDelete static IP address\u003cbr\u003eand WiFi-AP password\u003csup\u003e2\u003c/sup\u003e\u003c/td\u003e\n     \u003ctd align=\"left\"\u003e7123456\u0026#9166;\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n1: Board 1.6M or \u003e= 1.7 required; if LiPo battery is properly connected to battery monitor.\n2: Not supported through HA/MQTT [_INJECT_](#the-inject_x-command) command\n\n[Here](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### Controlling TCD Fake-Power\n\nThe Remote can, if so configured, control Fake-Power of a wirelessly connected Time Circuits Display.\n\nBy holding O.O when Fake-Power on the Remote is off, the Remote takes over control of Fake-Power on the TCD. The same can be achieved by entering 7096 on the TCD keypad.\n\nFrom now on, whenever you flip the Fake-Power switch on the Remote, the TCD will follow. \n\nTo release Fake-Power control, hold RESET when Fake-Power on the Remote is off.\n\nIf the option \"Fake-Power controls TCD Fake-Power\" is checked in the Config Portal, the Remote will take over Fake-Power control from the TCD at its startup, ie there is no need to initially press O.O.\n\nRemarks:\n- Buttons O.O/RESET need to configured for this function, see [here](#-holding-ooreset-when-fake-power-off).\n- The Remote has the highest Fake-Power priority. The TCD's TFC switch and Fake-Power control through HA/MQTT have lower priority; state changes are tracked but do not become effective until the Remote releases Fake-Power control.\n\n## Home Assistant / MQTT\n\nThe Remote supports MQTT protocol versions 3.1.1 and 5.0 for the following features:\n\n### Send messages through User Buttons\n\nIn the Config Portal, you can configure MQTT topics and messages for \"on\" and/or \"off\" for each of the eight User buttons/switches. This allows for arbitrary functions in your Home Assistant/MQTT realm. You could switch HA-integrated lights on or off or send TIMETRAVEL to your [Time Circuits Display](https://tcd.out-a-ti.me) (bttf/tcd/cmd) or REFILL to your [Dash Gauges](https://dg.out-a-ti.me) (bttf/dg/cmd).\n\nThe ON message will be sent when a button has been pressed, the OFF message when it has been released. In case of a button being configured as a maintained switch in the Config Portal, the ON message will be sent when the switch is closed, the OFF message when it is opened.\n\nFor a video how this works, see [here](https://youtu.be/SbuL2Bv5uqA?si=R54H7ocUr2Q1ZDAc).\n\n### Control the Remote via MQTT\n\nThe Remote can be controlled through messages sent to topic **bttf/remote/cmd**. Supported commands are\n- AUTOTHROTTLE_ON, AUTOTHROTTLE_OFF: Enable/disable [auto-throttle](#-auto-throttle)\n- COASTING_ON, COASTING_OFF: Enable/disable [coasting](#-coasting-when-throttle-in-neutral)\n- MOVIEACCEL_ON, MOVIEACCEL_OFF: Switch between movie and linear [acceleration](#-movie-like-acceleration)\n- DISPTCDSPD_ON, DISPTCDSPD_OFF: Enable/disable [speed display while fake-off](#-display-tcd-speed-when-fake-off)\n- MP_PLAY: Starts the [Music Player](#the-music-player)\n- MP_STOP: Stops the [Music Player](#the-music-player)\n- MP_NEXT: Jump to next song\n- MP_PREV: Jump to previous song\n- MP_SHUFFLE_ON: Enables shuffle mode in [Music Player](#the-music-player)\n- MP_SHUFFLE_OFF: Disables shuffle mode in [Music Player](#the-music-player)\n- MP_FOLDER_x: x being 0-9, set folder number for [Music Player](#the-music-player)\n- PLAYKEY_x: Play keyX.mp3 (from SD card), X being in the range from 1 to 9.\n- PLAYKEY_xL: Play keyXl.mp3 (from SD card), X being in the range from 1 to 9.\n- STOPKEY: Stop playback of keyX file. Does nothing if no keyX file is currently played back.\n- INJECT_x: See immediately below.\n\n#### The INJECT_x command\n\nThis command allows remote control of the Remote through HA/MQTT in the same way as through the TCD keypad by injecting commands in the Remote's command queue (hence the name). Commands are listed [here](#tcd-remote-command-reference); nearly all are supported. \n\nTo toggle movie/linear mode (7060), issue the following command: **INJECT_7060**\n\nTo play \"key2.mp3\" (7502), issue **INJECT_7502**\n\nTo select the 'music1' folder (7051), issue **INJECT_7051**\n\n### Receive commands from Time Circuits Display\n\nIf both TCD and Remote are connected to the same broker, and the option **_Publish time travel and alarm events_** is checked on the TCD's side, the Remote 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. The actual remote controlling requires a BTTFN connection.\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 **_Publish time travel and alarm events_**). If only BTTFN-aware devices are to be used, uncheck this option to use BTTFN as it has less latency.\n\n### Setup\n\nMQTT requires 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).\n\n![STAmode-mqtt](img/stamode-mqtt.png)\n\nThe broker's address needs to be configured in the Config Portal. It 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 supports protocol version 3.1.1, stick with 3.1.1. Version 5.0 has no advantages, but more overhead.\n\nIf your broker does not allow anonymous logins, a username and password can be specified.\n\nLimitations: 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. MQTT is disabled when the Remote is operated in AP-mode or when connected to the TCD run in AP-Mode (TCD-AP).\n\n## Car Setup\n\nIf your [Time Circuits Display](https://tcd.out-a-ti.me/) is mounted in a car or other places without a local WiFi network, the following network configuration is recommended:\n\n![STAmode-car](img/stamode-car2.png)\n\nThis configuration can easily achieved by putting both the TCD and the Remote in *Car Mode*:\n\n#### TCD\n\n- Set **_Power save timer_** to 0 (zero) in the \"AP-mode settings\" section on the *WiFi Configuration* page\n- Put your TCD in [*Car Mode*](https://tcd.out-a-ti.me/#car-mode) by issuing keypad command 991.\n\n#### Remote\n\nOne-time configuration steps:\n- Enter the Config Portal on the Remote, click on *Settings* and check that the hostname of the TCD (usually \"timecircuits\") is present in the  **_Hostname or IP address of TCD_** under *Wireless communication (BTTF-Network)* settings; do not use an IP address.\n- Furthermore, on the *WiFi Configuration* page, check that the TCD's WiFi network name (SSID; usually \"TCD-AP\") and password (if the TCD is configured with a password) are present under *Car mode settings*.\n\nIf everything is in place, you can enable Car mode on the Remote by holding the Calibration button for 6 seconds (until a triple-beep is emitted). The Remote will reboot and attempt to connect to the TCD's AP.\n\nYou can switch between your \"normal\" (home, iPhone, ..) WiFi connection and Car mode by holding the Calibration button for 6 seconds, regardless of Fake Power.\n\nTo access the Remote's Config Portal in Car mode, connect your handheld or computer to the TCD's WiFi network (\"TCD-AP\"), and direct your browser to http://dtmremote.local.\n\n  \u003e\u003cdetails\u003e\u003csummary\u003eIf that fails...\u003c/summary\u003e\n  \u003eIf connecting to http://dtmremote.local fails due to a name resolution error, go to the TCD's keypad menu, navigate to \"BTTFN CLIENTS\", and look for the Remote'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)\u003c/details\u003e\n\n## WiFi Power Saving Features\n\nIn AP-mode (ie when the device acts as an access point), WiFi can [only be used for the Config Portal](#connecting-to-a-wifi-network). Since changing settings in the Config Portal isn't something done on a regular basis, the Remote can switch off WiFi in AP-mode after a configurable period of time in order to save battery power.\n\nTo enable this power-saving feature, navigate to the \"WiFi Configuration\" page and enter into the field **_Power save timer_** in the \"Settings for AP-mode\" section the number of minutes that need to elapse from (real-)power-on until WiFi is supposed to be switched off. Anything between 10 and 99 minutes is allowed. Entering 0 disables this feature.\n\nAfter WiFi has been switched off due to timer expiration, and the option **_Re-enable WiFi on Fake Power_** is checked, WiFi will be re-enabled on fake-power-up, and the timer is restarted (ie WiFi is again switched off after timer expiration).\n\n\u003eIf the Remote ended up in AP-mode because the configured WiFi network wasn't reachable on (real-)power up, and the option **_Attempt re-connection on Fake Power_** is checked, the Remote will attempt to connect to the WiFi network on fake-power-on (and, as usual, fall back to AP-mode on failure; the timer is, of course, restarted in that case).\n\n## Flash Wear\n\nFlash memory has a somewhat limited lifetime. 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 Remote, 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; secondary settings are then stored on the SD card (which also suffers from wear but is easy to replace). See [here](#-save-secondary-settings-on-sd) for more information.\n\n## Firmware Installation / Firmware Update\n\nIf a previous version of the Remote firmware is installed on your device, you can update easily using the pre-compiled binary. Enter the [Config Portal](#the-config-portal), click on \"Update \u0026 Upload\", select the pre-compiled binary file (\"**remote-A10001986-Vx.xx.bin**\" or \"**Remote_vX.YY.bin**\") provided in the [Release package](https://github.com/realA10001986/Remote/releases), and click on *Update*.\n\n\u003cdetails\u003e\n\u003csummary\u003eInstalling on a fresh ESP32...\u003c/summary\u003e\nIf you are using a fresh ESP32, please go \u003ca href=\"https://install.out-a-ti.me\"\u003ehere\u003c/a\u003e and follow the instructions, or - if you are a nerd and want to deal with source code, compilers'n'stuff - see \u003ca href=\"https://github.com/realA10001986/Remote/blob/main/remote-A10001986/remote-A10001986.ino\"\u003eremote-A10001986.ino\u003c/a\u003e for detailed build and upload information.\n\u003c/details\u003e\n\n*After a firmware update, the \"wait\" symbol might be shown a bit longer while booting. Do NOT switch off the device during this time.*\n\n### Sound-pack installation\n\nThe firmware comes with a sound-pack which needs to be installed separately. The sound-pack is not updated as often as the firmware itself. There will be a message in the Config Portal and the Remote will briefly display \"INS\"-\"SND\"-\"PCK\" during boot when/if the sound-pack needs to be updated.\n\n_Note that installing the sound-pack requires an [SD card](#sd-card)._\n\nThe first step is to extract \"sound-pack-rmXX.zip\" (which is included in every [Release package](https://github.com/realA10001986/Remote/releases)). It contains one file, named \"REMA.bin\".\n\nNext, head to the [Config Portal](#the-config-portal), click on \"Update \u0026 Upload\", select the \"REMA.bin\" file in the _bottom_ file selector and click on *Upload*.\n\n\u003cdetails\u003e\n\u003csummary\u003eAlternative way\u003c/summary\u003e\nAlternatively, you can install the sound-pack the following way:\n- Using a computer, copy \"REMA.bin\" to the root directory of a FAT32 formatted SD card;\n- power down the Remote,\n- insert this SD card into the slot and \n- power up the Remote; the sound-pack will be installed automatically.\n\u003c/details\u003e\n\n---\n\n## Appendix A: The Config Portal\n\n### Main page\n\n##### \u0026#9193; WiFi Configuration\n\nThis leads to the [WiFi configuration page](#wifi-configuration)\n\n##### \u0026#9193; Settings\n\nThis leads to the [Settings page](#settings).\n\n##### \u0026#9193; HA/MQTT Settings\n\nThis leads to the [HomeAssistant/MQTT Settings page](#hamqtt-settings).\n\n##### \u0026#9193; Update \u0026 Upload\n\nThis leads to the firmware update and audio upload page.\n\nTo upload a new firmware, such as published in the [Release packages](https://github.com/realA10001986/Remote/releases), select the \"**remote-A10001986-Vx.xx.bin**\" or \"**Remote_vX.YY.bin**\" file as contained in the Release package in the _top_ file selector and click *Update*.\n\nYou can also install the Remote's sound-pack on this page; download the sound-pack (which is included in every [Release package](https://github.com/realA10001986/Remote/releases)), extract it and select the resulting REMA.bin file in the bottom file selector. Finally, click *Upload*. Note that an SD card is required for this operation.\n\nSee also [here](#firmware-installation--firmware-update).\n\nFinally, this page is also for uploading [custom or replacement sound files](#installing-custom--replacement-audio-files) to the SD card. Select an mp3 file in the bottom file selector and click *Upload*. (Maximum 16 files at a time.)\n\n---\n\n### WiFi Configuration\n\nThrough this page you can either connect your Remote to your local WiFi network or configure AP mode. \n\n#### \u003cins\u003eConnecting to an existing WiFi network\u003c/ins\u003e\n\nTo connect your Remote to your WiFi network, all you need to do is either to click on one of the networks listed at the top or to enter a __Network name (SSID)__, and optionally a __password__ (WPAx). If there is no list displayed, click on \"Scan for Networks\".\n\n\u003eBy default, the Remote requests an IP address via DHCP. However, you can also configure a static IP for the Remote 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\nIf there are several APs with identical SSID in your area, you can select a specific AP to use by its BSSID (AP's MAC address). You can either manually find out your AP's BSSID and enter it or have it filled out automatically: Click \"Scan for networks\", then \"Show all\". If you click on an AP, its BSSID will be copied into BSSID field in the form below. To see which AP is which, hover over the name to see its BSSID as a tooltip.\n\nIf the WiFi network the Remote is supposed to connect to wasn't reachable when the Remote was powered up, it will run in AP mode. You can trigger a re-connection attempt by fake-powering it down and up. This technique is also used for WiFi power-saving in AP-mode, see [here](#wifi-power-saving-features).\n\n##### \u0026#9193; Forget Saved WiFi Network\n\nClicking this button (and selecting \"yes\" in the confirmation dialog) deletes the currently saved WiFi network (SSID and password as well as static IP data) and reboots the device; it will restart in \"access point\" (AP) mode. See [here](#connecting-to-a-wifi-network).\n\n##### \u0026#9193; Car mode settings\n\nIn Car mode, the device connects to the TCD-AP as configured here instead of the WiFi network configured above. \n\nEnter your TCD's network name (usually \"TCD-AP\") in **_Network name (SSID) of TCD-AP_** and the TCD's AP password (if configured on the TCD) in **_Password for TCD-AP_**. \n\n\u003eIn the unlikely case that multiple TCD's are in range, you can single out your TCD by its BSSID. The TCD displays its BSSID on its *WiFi Configuration* page (starting version 3.23).\n\nIf you want to enter Car mode immediately, check **_Enable car mode_**. You can also later toggle between Car mode and normal WiFi connection by holding the Calibration button for 6 seconds (until a triple-beep is emitted).\n\n##### \u0026#9193; Hostname\n\nThe device's hostname in the WiFi network. Defaults to 'dtmremote'. 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://dtmremote.local)\n\nIf you have more than one Remote in your local network, please give them unique hostnames.\n\n_This setting applies to both AP-mode and when your Remote is connected to a WiFi network._ \n\n##### \u0026#9193; WiFi connection attempts\n\nNumber of times the firmware tries to reconnect to a WiFi network, before falling back to AP-mode. See [here](#connecting-to-a-wifi-network)\n\n##### \u0026#9193; Attempt re-connection on Fake Power\n\nIf the configured WiFi network wasn't reachable during power-up (and the Remote, as a result, fell back to AP-mode), and this option is checked, the Remote will re-try to connect to the configured WiFi network upon Fake-Power-On. If this option is unchecked, no connection attempts are made, the Remote will remain in AP-mode until (real-)powered-down.\n\n#### \u003cins\u003eSettings for AP-mode\u003c/ins\u003e\n\n##### \u0026#9193; Network name (SSID) appendix\n\nBy default, when your Remote creates a WiFi network of its own (\"AP-mode\"), this network is named \"REM-AP\". In case you have multiple Remotes 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 \"REM-AP-ABC\". Characters A-Z, a-z, 0-9 and - are allowed.\n\n##### \u0026#9193; Password\n\nBy default, and if this field is empty, the Remote's own WiFi network (\"REM-AP\") will be unprotected. If you want to protect your 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 Remote, \n- power-down the device,\n- hold the Calibration button,\n- power-up the device (while still holding the Calibration button)\n- wait until the display shows a counter-clockwise circle animation,\n- press Button \"O.O\" twice within 10 seconds,\n- wait until the display shows \"RST\",\n- then release the Calibration button.\n\nThis procedure temporarily (until a reboot) clears the WiFi password, allowing unprotected access to the Config Portal. (Note that this procedure also deletes static IP address data; the device will return to using DHCP after a reboot.)\n\n##### \u0026#9193; WiFi channel\n\nHere you can select one out of 11 channels or have the Remote choose a random channel for you. The default channel is 1. Preferred are channels 1, 6 and 11.\n\nWiFi channel selection is key for a trouble-free operation. Disturbed WiFi communication can lead to disrupted sequences, packet loss, hanging or freezing props, and other problems. A good article on WiFi channel selection is [here](https://community.ui.com/questions/Choosing-the-right-Wifi-Channel-on-2-4Ghz-Why-Conventional-Wisdom-is-Wrong/ea2ffae0-8028-45fb-8fbf-60569c6d026d).\n\nIf a WiFi Scan was done (which can be triggered by clicking \"Scan for Networks\"), \n\n- a list of networks is displayed at the top of the page; click \"Show All\" to list all networks including their channel;\n- a \"proposed channel\" is displayed near the \"WiFi channel\" drop-down, based on a rather simple heuristic. The banner is green when a channel is excellent, grey when it is impeded by overlapping channels, and when that banner is red operation in AP mode is not recommended due to channels all being used.\n\nThe channel proposition is based on all WiFi networks found; it does not take non-WiFi equipment (baby monitors, cordless phones, Bluetooth devices, microwave ovens, etc) into account. \n\n##### \u0026#9193; Power save timer\n\nSee [here](#wifi-power-saving-features).\n\n##### \u0026#9193; Re-enable WiFi on Fake Power\n\nIf a power save timer is configured and has expired, and this option is checked, the Remote will re-enable WiFi upon Fake-Power-On. If this option is unchecked, WiFi will **not** be re-enabled, it will stay off until (real-)power down. See also [here](#wifi-power-saving-features).\n\n---\n\n### Settings\n\n#### \u003cins\u003eBasic settings\u003c/ins\u003e\n\n##### \u0026#9193; Auto throttle\n\nIf this is checked, acceleration is, after being started by pushing the throttle stick up, continued even if the stick is released into neutral. Acceleration is stopped when pulling down the throttle stick or when 88mph is reached.\n\nThis setting can quickly be toggled by holding the RESET button, if [so configured](#-holding-reset-when-fake-power-on).\n\n##### \u0026#9193; Coasting when throttle in neutral\n\nNormally, when this is unchecked, keeping the throttle in neutral (center) position holds the current speed. If this option is checked, speed will slowly decrease in neutral, just like a car when the kludge is held down or the gear is in neutral.\n\n##### \u0026#9193; Movie-like acceleration\n\nThe Remote knows to modes of acceleration: \"Movie mode\" and \"linear\".\n\nIn movie mode, acceleration changes with speed. At lower speeds, it is faster, and will gradually become slower as speed increases. The pace matches the movie mostly; unfortunately, the remote is only shown for a very few seconds and timing is inconsistent (to say the least), so some interpolations were required.\n\nIn linear mode, the acceleration curve is a straight line, ie the time between each mph is the same.\n\n##### \u0026#9193; Play acceleration 'click' sound\n\nCheck this to play a click sound for each \"mph\" while accelerating. Uncheck to stay mute. Note that the click is only played when accelerating, not with reducing speed.\n\n##### \u0026#9193; Play TCD-alarm sounds\n\nIf a TCD is connected via BTTFN or MQTT, the Remote visually signals when the TCD's alarm sounds. If you want to play an alarm sound, check this option.\n\n##### \u0026#9193; Display TCD speed when fake-off\n\nWhen this is checked, the Remote (when fake-powered off) shows whatever the TCD displays on its speedo. For instance, if your TCD is in a car along with a GPS-equipped speedo, the Remote can show the GPS speed.\n\n#### \u003cins\u003eMusic Player settings\u003c/ins\u003e\n\n##### \u0026#9193; Music folder\n\nSelects the current music folder, can be 0 through 9. \n\nThis can also be set/changed through a TCD keypad via BTTFN (7050 - 7059). Such a change will be saved immediately.\n\n#### \u003cins\u003eSettings for BTTFN communication\u003c/ins\u003e\n\n##### \u0026#9193; Hostname or IP address of TCD\n\nTo connect your Remote to a Time Circuits Display wirelessly (\"BTTF-Network\"), enter the TCD's hostname - usually 'timecircuits' - or IP address here. Hostname is preferred because it makes the setup independent of the network environment.\n\n##### \u0026#9193; Remote Fake-Power controls TCD Fake-Power\n\nThis selects the power-up behavior of Fake-Power control over the TCD.\n\nIf this option is checked, the Remote takes over Fake-Power control from the TCD when booting. If the TCD is powered-up after the Remote, it will recognize the Remote's state and stay silent and dark until the Remote is fake-powered up.\n\nIf this option is unchecked, you need to hold O.O to gain Fake-Power control on the TCD, as described [here](#controlling-tcd-fake-power).\n\n##### \u0026#9193; Button to refill Plutonium\n\nHere you can select a user button/switch which, when activated, sends a \"REFILL\" command to the [Dash Gauges](https://dg.out-a-ti.me) through the TCD. This is useful for quickly silencing the Dash Gauges after a Time Travel.\n\n#### \u003cins\u003eOther settings\u003c/ins\u003e\n\n##### \u0026#9193; Save secondary settings on SD\n\nIf this is checked, some settings (volume, etc) 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 Remote. See [Flash Wear](#flash-wear).\n\nApart from flash Wear, there is another reason for using an SD card for settings: Writing data to internal flash memory can cause delays of up to 1.5 seconds, which interrupt sound playback and have other undesired effects. The Remote needs to save data from time to time, so for a smooth experience without unexpected and unwanted delays, please use an SD card and check this option.\n\nIt is safe to have this option checked even with no SD card present.\n\nIf you want copy settings from one SD card to another, do as follows:\n- With the old SD card still in the slot, enter the Config Portal, turn off _Save secondary settings on SD_, and click \"SAVE\".\n- After the Remote has rebooted, power down, and swap the SD card for your new one.\n- Power-up the Remote, enter the Config Portal, re-enable _Save secondary settings on SD_, and click \"SAVE\".\n\nThis procedure ensures that all your settings are copied from the old to the new SD card.\n\n#### \u003cins\u003eButton assignment settings\u003c/ins\u003e\n\n##### \u0026#9193; Holding O.O/RESET when Fake-Power off\n\nThis selects what happens when you hold the O.O or RESET button for 2 seconds when Fake-Power is off:\n\n- _adjusts display brightness_: O.O increases display brightness, RESET decreases it.\n- _takes/releases control of TCD Fake Power_: O.O takes over [TCD Fake-Power control](#controlling-tcd-fake-power), RESET releases it.\n\n##### \u0026#9193; Pressing O.O when Fake-Power on\n\nThis selects what happens when you (briefly) press the O.O button when Fake-Power is on:\n\n- _Plays previous song in Music Player_: As it says, as part of Music Player control, O.O jumps to the previous song.\n- _Makes throttle-up trigger a time travel_: Briefly pressing O.O prepares a Time Travel, which is then triggered when pushing the throttle stick upward.\n\n##### \u0026#9193; Holding RESET when Fake-Power on\n\nThis selects what happens when you hold the RESET button when Fake-Power is on:\n\n- _toggles shuffle in Music Player_: As it says, as part of Music Player control, it toggles the shuffle setting.\n- _toggles auto-throttle_: Holding RESET toggles the [auto-throttle](#-auto-throttle) setting.\n\n#### \u003cins\u003eHardware configuration settings\u003c/ins\u003e\n\n##### \u0026#9193; Button x is maintained\n\nYou might want use one or more switches of the Futaba remote for sound effects and/or MQTT messages. If that switch is a maintained contact, check this option for the respective \"button\" number. Leave unchecked when using a momentary button.\n\n##### \u0026#9193; Maintained: Play audio on ON only\n\nIf this is unchecked, audio is played on every flip (OFF-\u003eON, ON-\u003eOFF) of the maintained switch. If checked, keyX is only played when the switch is brought into \"ON\" position. Check this if using three-position switches where both ON positions are wired to different \"Buttons\" on the Control Board.\n\n##### \u0026#9193; Use Futaba Power LED\n\nThis setting is for using the Futaba's original power LED. If this LED isn't connected to the control board, this setting has no effect.\n\nIf unchecked, the power LED stays dark, which is the default. If checked, the power LED lights up on either real power or fake power.\n\n##### \u0026#9193; Power LED on fake power\n\nIf unchecked, the power LED lights up on real power. If checked, it does so on fake power.\n\n##### \u0026#9193; Use Futaba Battery Level Meter\n\nThis setting is for using the Futaba's original battery level meter. If this meter isn't connected to the control board, this setting has no effect.\n\nIf unchecked, the level meter stays at zero, which is the default. If checked, the level meter shows a fictious battery level of around 75%.\n\nPlease note that the meter does not show actual battery level; the built-in battery monitor, as described below, only works through the Stanley display.\n\n##### \u0026#9193; Level Meter on fake power\n\nIf unchecked, the level meter comes to life on real power. If checked, it does so on fake power.\n\n#### \u003cins\u003eBattery monitoring\u003c/ins\u003e\n\n##### \u0026#9193; Battery monitoring/warnings\n\nEnable or disable battery monitoring and respective warnings. Battery monitoring requires using Control Board versions 1.6M or \u003e= 1.7, plus a properly connected LiPo battery.\n\nIf the battery level is lower than 8 percent, a warning is issued. The way it is given depends on hardware and software settings, see [here](#battery-monitoring).\n\n##### \u0026#9193; Battery type\n\nBattery monitoring only works reliably with the LiPo batteries listed. Select the type you are using.\n\nThe battery CircuitSetup supplies as part of their kit is of the 3.7/4.2V type.\n\n##### \u0026#9193; Capacity per cell (1000-6000)\n\nBattery monitoring requires knowledge about the cell capacity. Note that the capacity _per cell_ is required to be entered. Most batteries consist of two or more cells; in that case divide the nominal capacity by the number of cells and enter the number here.\n\nThe battery CircuitSetup supplies as part of their kit is a dual-cell 5000mAh LiPo battery. The value to enter here is therefore 2500.\n\n---\n\n### HA/MQTT Settings\n\n##### \u0026#9193; Home Assistant support (MQTT)\n\nIf checked, the Remote will connect to the broker (if configured) and send and receive messages via [MQTT](#home-assistant--mqtt)\n\n##### \u0026#9193; 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 a different port is to be used, it can be specified after the domain/IP and a colon \":\", for example: \"192.168.1.5:1884\". Specifying 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#9193; Protocol version\n\nThe firmware supports MQTT 3.1.1 and 5.0. There is no difference in features, so there is no advantage in selecting 5.0. This was implemented only for brokers that do not support 3.1.1.\n\n##### \u0026#9193; 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##### \u0026#9193; Button x topic\n\nThe MQTT topic for on/off messages. Nothing is published/sent if the topic is empty.\n\n##### \u0026#9193; Button x message on ON/OFF\n\nThe MQTT message to publish to the button's topic when a button is pressed/released (or in case of a maintained switch: when the switch is put in \"on\"/\"off\" position). If a field is empty, nothing is published/sent.\n\n## Appendix B: Display messages\n\n- \"INS\" -\u003e \"SND\" -\u003e \"PCK\": Please install/update the [sound pack](#sound-pack-installation)\n- \"BAT\": Battery is low\n- \"CAL\", \"UP\", \"DN\": Shown during [calibration](#calibration)\n- \"ERR\": Error while installing the sound-pack or during calibration. Please try again.\n- \"FUL\": Battery is full, ie 100% charged\n- \"IP\": IP address is going to be shown.\n- \"RST\": WiFi password temporarily cleared; static IP permanently deleted\n- \"UPD\": Firmware update available; shown briefly at power-up (optional).\n\n---\n_Text \u0026 images: (C) Thomas Winischhofer (\"A10001986\"). See LICENSE._ [Source](https://remote.out-a-ti.me)  \n_Other props: [Time Circuits Display](https://tcd.out-a%2dti.me) ... [Flux Capacitor](https://fc.out-a%2dti.me) ... [SID](https://sid.out-a%2dti.me) ... [Dash Gauges](https://dg.out-a%2dti.me) ... [VSR](https://vsr.out-a%2dti.me) ... [TFC](https://tfc.out-a%2dti.me)_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freala10001986%2Fremote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freala10001986%2Fremote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freala10001986%2Fremote/lists"}