Files
escape_gallery_obsidian_vault/Projects/Software/Escape Gallery Control Software.md
T

27 KiB
Raw Blame History

active, tags
active tags
true
project
eg

Goal

Create escape room control software. Each Raspberry Pi (RPi) controls some number of wired props in the room. The room and props are referred to as the game. The game is made up of a number of game elements which can be puzzles, lights, sound, etc.. Each element can utilize one or more props, wired and/or non-wired.

System Diagram

!EG-Controllers.png

Tasks

  • Add horse nicker as a sound effect ➕ 2026-05-11 ✅ 2026-05-11
  • Set horse to only trigger in auto pilot if ship and axe puzzle are solved, otherwise nicker and reset after 10 seconds ➕ 2026-05-10 ✅ 2026-05-12
  • Set helmets to only trigger in auto pilot if knocker is solved, otherwise grunt and reset after 10 seconds ➕ 2026-05-10 ✅ 2026-05-12
  • Display the version number in the DMG title (use version.json5) ➕ 2026-04-21 ✅ 2026-05-14
  • Collect and display the prop controller version numbers and display in the user interface ➕ 2026-05-11 ✅ 2026-05-14
  • Change the drum sequence and the number of lights that illuminate ➕ 2026-05-15 ✅ 2026-05-20
  • Add the lock combinations to the user interface ➕ 2026-04-23 ✅ 2026-05-20
  • Put all locks on one tab ➕ 2026-05-22 ✅ 2026-05-30
  • Add drum puzzle sequence to the UI ➕ 2026-05-22
  • Add axe puzzle order to the UI ➕ 2026-05-22
  • Add the table puzzle order to the UI ➕ 2026-05-22
  • Move all lock combinations onto one tab ➕ 2026-05-21
  • Add Postgres user for the control software ➕ 2026-05-22
  • Add tables for the Memir phrases ➕ 2026-05-22
  • Collect and display the game controller version number in the user interface ➕ 2026-05-14
  • Change the knocker sequence to match the tapping ➕ 2026-05-15

Archived Tasks

  • Change each prop controller to send the time to the next ping in seconds along with it's name ➕ 2026-04-21 ✅ 2026-05-09
  • Ensure prop controllers send a ping when they start ➕ 2026-04-22 ✅ 2026-05-09
  • Add .pkg generation to the odin_ui/Justfile with version number in file name ➕ 2026-03-20 ✅ 2026-05-09
  • Rename sys_ping_interval_secs in the server to be initial_sys_poll_time_secs ➕ 2026-04-21 ✅ 2026-05-09
  • Keep track of all next contact Instant ➕ 2026-04-21 ✅ 2026-05-10
  • Switch iOS build of Odin to Escape Gallery profile ➕ 2026-04-16 ✅ 2026-05-10
  • Add support for pre-defined messages for Memir in the user interface ➕ 2026-03-05 ✅ 2026-05-06
  • Create a separate stopwatch task with it's own commands; start, stop, reset ➕ 2026-02-06 ✅ 2026-02-11
  • Incorporate new stopwatch into auto pilot and UI ➕ 2026-02-09 ✅ 2026-03-17
  • Fix timer to be visible everywhere ➕ 2026-02-07 ✅ 2026-03-17
  • Add faster feedback when press speak button ➕ 2026-02-07 ✅ 2026-03-17
  • Move Memir up in the UI ➕ 2026-02-07 ✅ 2026-04-16
  • Update the Escape Gallery Control Software with Geno structures ➕ 2026-03-23 ✅ 2026-04-16
  • Swap in Geno for all messages and use MessagePack in Dart ➕ 2026-03-03 ✅ 2026-04-16
  • Test out using MessagePack in Dart with Geno and Rust ➕ 2026-03-03 ✅ 2026-04-16
  • Add release to the Justfile to build macOS package and iOS app ➕ 2026-04-16 ✅ 2026-04-21
  • Fix running the app in release mode on MacOS ➕ 2026-03-08 ✅ 2026-04-21
  • Create a tool to generate the update methods that copy from game command to game state where the name matches ➕ 2026-04-22 ✅ 2026-04-23
  • Sync up all the game command message field with corresponding state message fields ➕ 2026-04-22 ✅ 2026-04-23
  • Finish the odin_game_test service that just responds to commands by changing state ➕ 2026-04-21 ✅ 2026-04-23
  • Add a script to start the NATS service and the test game controller ➕ 2026-04-23 ✅ 2026-04-23
  • Move all getFullState calls into the services after connection ➕ 2026-04-23 ✅ 2026-04-26
  • All UI latch toggles are broken ➕ 2026-04-23 ✅ 2026-04-26
  • Change UI to toggle buttons to solve/unsolve puzzles ➕ 2026-04-23 ✅ 2026-04-26
  • Fix the bug with leaving the bellows in the fishes mouth ➕ 2026-03-05 ✅ 2026-04-26
  • Add the two iOS devices to the provisioning profile for Escape Gallery ➕ 2026-04-16 ✅ 2026-04-27
  • Create a tool to generate the update from prop state to prop state ➕ 2026-04-22 ✅ 2026-05-01
  • Fix iOS app to reconnect to the NATS service after resume ➕ 2026-04-22 ✅ 2026-05-04
  • Add ClueServer to odin-ctrl ➕ 2026-02-04 ✅ 2026-02-04
  • Move Piper TTS code over to odin-av2 and cut volume ➕ 2026-02-04 ✅ 2026-02-04
  • Add Memir text to speech UI ➕ 2026-01-16 ✅ 2026-02-04
  • Debug Memir end-to-end ➕ 2026-02-04 ✅ 2026-02-06
  • Ensure time with seconds shows when in finished state ➕ 2026-01-28 ✅ 2026-02-06
  • Increase power supply timer for odin-drum and screw down the lid ➕ 2026-01-26 ✅ 2026-02-06
  • Remove and drill out the holes for the knocker ➕ 2026-02-04 ✅ 2026-02-06
  • Ensure odin-ctrl restarts always (fix .conf file) ➕ 2026-01-28 ✅ 2026-02-06
  • Write test program for odin-av2 to test TTS ➕ 2026-01-14 ✅ 2026-02-04
  • Fix odin-av2 build problem ➕ 2026-01-18 ✅ 2026-01-25
  • Design and print caps for the knocker switches ➕ 2026-01-18 ✅ 2026-01-25
  • Fix the electronics in the horses head ➕ 2026-01-11 ✅ 2026-01-25
  • Add continuous re-start logic to all servers ➕ 2026-01-22 ✅ 2026-01-25
  • Fix the knocker detection algorithm ➕ 2026-01-14 ✅ 2026-01-26
  • Merge new knocker code into odin-drum ➕ 2026-01-26 ✅ 2026-01-27
  • Add the code to gradually turn off the sconces ➕ 2026-01-19 ✅ 2026-01-28
  • Wolf snarl starts to quickly after last animal head solved ➕ 2026-01-19 ✅ 2026-01-19
  • End sequence starts to quickly after hammer or dragon is solved ➕ 2026-01-19 ✅ 2026-01-19
  • Tree of life lights turn off when the helm lights are turned on or off ➕ 2026-01-19 ✅ 2026-01-19
  • Turn on the other light when going through the fireplace ➕ 2026-01-19 ✅ 2026-01-19
  • Fireplace latch extra toggles need to be faster ➕ 2026-01-19 ✅ 2026-01-19
  • Reduce sound effect volume ➕ 2026-01-19 ✅ 2026-01-19
  • Switch eyes on the berserker heads in the prop controller ➕ 2026-01-18 ✅ 2026-01-19
  • Change all prop controller main.rs and config_file.rs to require a config file ➕ 2026-01-18 ✅ 2026-01-19
  • Reduce number of times required to turn crank and make configurable ➕ 2026-01-19 ✅ 2026-01-19
  • Put degrees_to_duty_cycle in odin_prop_util ➕ 2026-01-19 ✅ 2026-01-19
  • Dragons triggered with only one half of the spear ➕ 2026-01-19 ✅ 2026-01-19
  • Turn off barrel puzzle after 5 minutes ➕ 2026-01-19 ✅ 2026-01-19
  • Make Memir's eye pulse when on ➕ 2026-01-19 ✅ 2026-01-19
  • Make sconces flicker ➕ 2025-08-13 ✅ 2026-01-19
  • Make chandelier flicker ➕ 2025-12-23 ✅ 2026-01-19
  • Make fireplace flicker ➕ 2025-12-23 ✅ 2026-01-19
  • Off condition must turn off cupboards lights, dragon eyes, helm eyes, hammer box light ➕ 2026-01-19 ✅ 2026-01-19
  • Check the Running room condition sets all the game states ➕ 2026-01-19 ✅ 2026-01-19
  • Implement the Ready room condition ➕ 2026-01-17 ✅ 2026-01-19
  • Implement the Resetting room condition ➕ 2026-01-17 ✅ 2026-01-19
  • Implement the Finished room condition ➕ 2026-01-17 ✅ 2026-01-19
  • Turn on warriors eyes when helm puzzle solved ➕ 2026-01-19 ✅ 2026-01-19
  • Check tree lights turn on when the fireplace opens ➕ 2026-01-19 ✅ 2026-01-19
  • Add sound effects into the auto-pilot; eagle, horse, bear, fish, hammer, dragons, ➕ 2026-01-18 ✅ 2026-01-19
  • Grand finale lightning sequence with flashing lights ➕ 2026-01-18 ✅ 2026-01-19
  • Add a timer to the auto-pilot tab ➕ 2026-01-19 ✅ 2026-01-19
  • Hook up auto-pilot logic to update the time and sconces based on the time elapsed ➕ 2026-01-19 ✅ 2026-01-19
  • Have fire place latch cycle 3 times in the prop controller ➕ 2026-01-19 ✅ 2026-01-19
  • Replace the barrel audio ➕ 2026-01-13 ✅ 2026-01-14
  • Test out the microphones and make sure we can hear everything ➕ 2026-01-13 ✅ 2026-01-14
  • Refactor to remove the timer in the controller in prep for moving timing to the auto-pilot ➕ 2026-01-14 ✅ 2026-01-14
  • Add margin to the LabelIconButtons ➕ 2026-01-16 ✅ 2026-01-16
  • Make a LabelButton widget with a fix width ➕ 2026-01-14 ✅ 2026-01-16
  • Switch to using publish_json and publish_rmp in odin_ctrl ➕ 2026-01-15 ✅ 2026-01-16
  • Get piper-rs building in container ➕ 2026-01-14 ✅ 2026-01-16
  • Go through all cmd_loop's and move Some(cmd) => logic inside the match ➕ 2026-01-04 ✅ 2026-01-16
  • Rename dragon to mantle puzzle ➕ 2026-01-11 \7 u ✅ 2026-01-16
  • Create new helm electronics for testing with simulator ➕ 2026-01-10 ✅ 2026-01-17
  • Repair electronics for the helms in odin-tree ➕ 2026-01-11 ✅ 2026-01-17
  • Implement end game and room off commands for auto-pilot ➕ 2026-01-16 ✅ 2026-01-17
  • Remove "Auto Pilot" toggle and add buttons for "Room Ready", "Start Game", "End Game", and "Room Off" ➕ 2026-01-14 ✅ 2026-01-17
  • Process, add to assets and upload all sound effects to odin-av1 ➕ 2026-01-15 ✅ 2026-01-17
  • Write test program to set background audio volume ➕ 2026-01-15 ✅ 2026-01-18
  • Play sound effects and duck background audio ➕ 2026-01-11 ✅ 2026-01-18
  • Change color of buttons when value like radio button (add a flag to LabelIconButton) ➕ 2026-01-11 ✅ 2026-01-18
  • Hook up Ui for sound effects ➕ 2026-01-15 ✅ 2026-01-18
  • Implement the Off room condition ➕ 2026-01-17 ✅ 2026-01-18
  • Install new software on iPad ➕ 2026-01-18 ✅ 2026-01-19
  • Commit all odin_test to Gitea ➕ 2026-01-11 ✅ 2026-01-11
  • Create test program for the drum sequence ➕ 2026-01-11 ✅ 2026-01-11
  • Finish the coding for the drum sequence ➕ 2026-01-04 ✅ 2026-01-11
  • Fix sequence and write the tree on/off prop code ➕ 2025-12-29 ✅ 2026-01-11
  • Install new piezo drum vibration sensors ➕ 2025-08-17 ✅ 2026-01-11
  • Write code for odin-drum to detect drumming pattern ➕ 2025-12-23 ✅ 2026-01-11
  • Hook up knocker to auto-pilot ➕ 2025-12-26 ✅ 2026-01-11
  • Hook up drums to auto-pilot ➕ 2025-12-26 ✅ 2026-01-11
  • Hook up hammer hand to auto-pilot ➕ 2026-01-11 ✅ 2026-01-11
  • Hook up dragons to auto-pilot ➕ 2026-01-11 ✅ 2026-01-11
  • Add the timer to the auto-pilot ➕ 2025-12-23 ✅ 2026-01-13
  • Add UI to start background music ➕ 2025-12-23 ✅ 2026-01-11
  • Add UI for drums ➕ 2025-12-23 ✅ 2026-01-11
  • Design the case for the combined power and buck board ➕ 2025-12-23 ✅ 2026-01-11
  • Print cases and assemble and program the first one taking notes ➕ 2025-12-23 ✅ 2026-01-11
  • Add code to read the Berserker heads in odin_tree ➕ 2025-11-06 ✅ 2026-01-11
  • Add UI for Berserker heads ➕ 2025-11-12 ✅ 2026-01-11
  • Make the barrel puzzle audio play forever ➕ 2026-01-04 ✅ 2026-01-10
  • Add a switch in UI to turn on tree lights ➕ 2025-11-12 ✅ 2026-01-10
  • Write the helms prop code ➕ 2025-12-29 ✅ 2026-01-10
  • Finish the dragon prop code (reset is not working) ➕ 2026-01-03 ✅ 2026-01-10
  • Finish the coding for the detection of the knocker sequence ➕ 2026-01-04 ✅ 2026-01-10
  • Add av1 and av2 into System tab ➕ 2025-12-13 ✅ 2025-12-13
  • Create prop control software for odin-av1 ➕ 2025-12-13 ✅ 2025-12-13
  • Create prop control software for odin-av2 ➕ 2025-12-13 ✅ 2025-12-13
  • RFID reader for spear do not register RFID tag reliably. Wall is likely too thick, there are metal nails or screws in the wood, RFID tags buried too deep ➕ 2025-11-08 ✅ 2025-11-13
  • Dagger no longer registers reliably. RFID in wrong position or too deep. Also, knife can be reversed so not sure which side RFID tag is on ➕ 2025-11-08 ✅ 2025-11-13
  • Horses right eye no longer registers light/dark - need to dismantle and debug ➕ 2025-11-08 ✅ 2025-11-13
  • Divide up the controllers equally between the power supplies and see if that fixes the power on problem ➕ 2025-11-08 ✅ 2025-11-13
  • Add horse head eye sensor code code in odin_middle ➕ 2025-11-04 ✅ 2025-11-06
  • Add short door latch opener code to odin_left ➕ 2025-11-05 ✅ 2025-11-06
  • Add long door latch opener code to odin_left ➕ 2025-11-05 ✅ 2025-11-06
  • Create deploy-all script ➕ 2025-11-05 ✅ 2025-11-06
  • Add reset UI ➕ 2025-11-08 ✅ 2025-11-08
  • Get fish RFID reader working with reset on odin_left ➕ 2025-11-04 ✅ 2025-11-08
  • Get bear RFID reader working with reset odin_left ➕ 2025-11-04 ✅ 2025-11-08
  • Get bird RFID reader working odin_middle ➕ 2025-11-04 ✅ 2025-11-08
  • Get horse eye light sensors working odin_middle ➕ 2025-11-04 ✅ 2025-11-08
  • Change PROP_SYSTEM_STATE_SUBJECT to prop.system.state and re-deploy all prop controllers ➕ 2025-11-04 ✅ 2025-11-08
  • Fix the broken sensors on the barrel puzzle ➕ 2025-11-04 ✅ 2025-11-08
  • Add UI for the knocker puzzle; knocker, long door ➕ 2025-11-08 ✅ 2025-11-08
  • Get knocker door opener working ➕ 2025-11-08 ✅ 2025-11-08
  • Add UI for drum puzzle; tree, sensors, short door ➕ 2025-11-08 ✅ 2025-11-08
  • Get the drum door opener working ➕ 2025-11-08 ✅ 2025-11-08
  • Add UI for the helm puzzle; helmets, hammer chest ➕ 2025-11-08 ✅ 2025-11-08
  • Get helm puzzle chest opening ➕ 2025-11-08 ✅ 2025-11-08
  • Add UI for berserker_puzzle. ➕ 2025-11-06 ✅ 2025-11-09
  • Rename odin_prop to odin_prop_msg ➕ 2025-11-08 ✅ 2025-11-09
  • Create a new odin_prop_util for helpers.rs contents and remove all helpers.rs files ➕ 2025-11-08 ✅ 2025-11-09
  • Tidy up dragon puzzle UI ➕ 2025-11-11 ✅ 2025-11-11
  • Get spear hooked up to UI ➕ 2025-11-11 ✅ 2025-11-11
  • Create a generic to fn for receiving Cmd messages and do a debug! in prop controllers like in odin_ctrl ➕ 2025-11-08 ✅ 2025-11-12
  • Generate a Dart file for SvgPicture in a service and register ➕ 2025-11-05 ✅ 2025-11-12
  • Get hammer UI working; hand ➕ 2025-11-08 ✅ 2025-11-12
  • Get table puzzle UI coded ➕ 2025-10-18 ✅ 2025-10-31
  • Get ship puzzle UI coded ➕ 2025-10-26 ✅ 2025-10-31
  • Change timer UI to be a slider ➕ 2025-10-25 ✅ 2025-10-31
  • Add a Slider with discrete values and allow setting ➕ 2025-10-26 ✅ 2025-10-31
  • Get fireplace puzzle UI coded ➕ 2025-10-26 ✅ 2025-10-31
  • Get barrel puzzle UI coded ➕ 2025-10-31 ✅ 2025-10-31
  • Configure laptop so I can build and install control software on iPad ➕ 2025-10-31 ✅ 2025-11-01
  • Figure out how to set macOS menu and window to Odin ➕ 2025-10-31 ✅ 2025-11-01
  • Hook lighting up end-to-end ➕ 2025-10-31 ✅ 2025-11-01
  • Create a label_switch widget with a ✅ 2025-11-01
  • Use label_switch everywhere for consistent sizing of label plus switch ➕ 2025-11-01 ✅ 2025-11-01
  • Debug the axe puzzle ➕ 2025-11-01 ✅ 2025-11-01
  • Create a PositionedAxe widget with a bool? for the state ➕ 2025-11-01 ✅ 2025-11-01
  • Refactor odin-ctrl to pass discrete bool? back to UI for axes from controller ➕ 2025-11-01 ✅ 2025-11-02
  • Split lighting into throne and feast rooms ➕ 2025-10-31 ✅ 2025-11-02
  • Refactor controller to use include! to avoid extra module ➕ 2025-11-02 ✅ 2025-11-02
  • Hook table puzzle up end-to-end ➕ 2025-11-01 ✅ 2025-11-02
  • Hook ship puzzle up end-to-end ➕ 2025-10-31 ✅ 2025-11-02
  • Make NavigationRail scrollable ➕ 2025-11-04 ✅ 2025-11-04
  • Hook up the barrel puzzle end-to-end ➕ 2025-11-02 ✅ 2025-11-04
  • Put the Stack elements in a container that is sized from the biggest SVG ➕ 2025-11-04 ✅ 2025-11-04
  • Remove the numbers from the axeFrame ➕ 2025-11-04 ✅ 2025-11-04
  • Fix the system status code in the controller. ➕ 2025-11-04 ✅ 2025-11-04
  • Add fireplace latch pin code ➕ 2025-11-04 ✅ 2025-11-04
  • Get bird RFID reader working ➕ 2025-11-04 ✅ 2025-11-05
  • Add chest latch opener code ➕ 2025-11-05 ✅ 2025-11-05
  • Break the messages to/from the prop controllers into a separate library ➕ 2025-09-28 ✅ 2025-09-28
  • Switch to using MessagePacker cr for message transmission ➕ 2025-09-28 ✅ 2025-09-28
  • Just add the message format header ➕ 2025-09-28 ✅ 2025-09-28
  • Test the new odin_axe code ➕ 2025-09-28 ✅ 2025-09-28
  • Merge changes back into rust_prop_quickstart ➕ 2025-09-28 ✅ 2025-09-28
  • Add odin_prop to odin_ctrl ➕ 2025-09-28 ✅ 2025-10-03
  • Create AxePuzzle object and hold onto the handle in the Server object ➕ 2025-09-28 ✅ 2025-10-03
  • Create a new new Flutter app for control ➕ 2025-04-21 ✅ 2025-10-03
  • Add dummy state into odin_prop to support rust_prop_quickstart ➕ 2025-09-28 ✅ 2025-10-03
  • Add command to force full state to be sent to controller ➕ 2025-10-03 ✅ 2025-10-03
  • Send full state command when controller starts ➕ 2025-10-03 ✅ 2025-10-03
  • Request full state when the UI starts up or when the puzzle button is clicked on left ➕ 2025-10-03 ✅ 2025-10-04
  • Whiteboard the control software design ➕ 2024-11-26 ✅ 2025-04-25
  • Finish Sketch from a plan view of the room ➕ 2025-02-16 ✅ 2025-08-13
  • Configure static IP for eg-1 on rm-1.escapegallery.net ✅ 2025-09-08
  • Configure DHCP & DNS via dnsmasq on eg-1 ➕ 2025-08-06 ✅ 2025-09-08
  • Configure wired connection for odin-axe ➕ 2025-08-13 ✅ 2025-09-08
  • Configure /etc/hosts on eg-1 to add eg-1.rm-1.escapegallery.net ➕ 2025-09-08 ✅ 2025-09-09
  • Ensure that we can ssh over the 10.10.0.0/24 network ➕ 2025-09-08 ✅ 2025-09-09
  • Configure nftables for the rm-1 network to NAT packets ➕ 2025-09-08 ✅ 2025-09-09
  • Temporarily take down odin-axe WiFi and check that updates work ➕ 2025-09-09 ✅ 2025-09-09
  • Set timeouts for DHCP on odin-axe and reboot ➕ 2025-09-09 ✅ 2025-09-09
  • Disable the WiFi permanently on RPi for odin-axe and test reboot ➕ 2025-09-08 ✅ 2025-09-09
  • Add env_logger to odin_axe and remove existing logger ➕ 2025-09-11 ✅ 2025-09-11
  • Add a command line to indicated the name of the NATS server ➕ 2025-09-11 ✅ 2025-09-11
  • Add Ctrl+C handling ➕ 2025-09-11 ✅ 2025-09-12
  • Add a select loop that listens on a flume channel for messages from the monitor thread ➕ 2025-09-11 ✅ 2025-09-12
  • Add the thread to monitor the state of the readers ➕ 2025-09-11 ✅ 2025-09-12
  • Add flume and send a message when axe state changes to main loop ➕ 2025-09-11 ✅ 2025-09-12
  • Remove the checks for correctness just record the UID from the RFID chips ➕ 2025-09-11 ✅ 2025-09-12
  • Add serde and serde_json to the project ➕ 2025-09-11 ✅ 2025-09-12
  • Kill the GPIO thread when Ctrl+C is hit ➕ 2025-09-12 ✅ 2025-09-12
  • Add a HashMap<String, Value> to track prop state ➕ 2025-09-11 ✅ 2025-09-12
  • If the value has change, update the HashMap ➕ 2025-09-12 ✅ 2025-09-12
  • Publish nats message when state changes ➕ 2025-09-12 ✅ 2025-09-12
  • Run setup scripts on odin-throne and odin-feast ➕ 2025-09-13 ✅ 2025-09-13
  • Reverse odin-throne and odin-feast host names ➕ 2025-09-13 ✅ 2025-09-13
  • Add odin account to /etc/nats-server.conf on eg-1 ➕ 2025-09-13 ✅ 2025-09-13
  • Install and configure lld linker and test ➕ 2025-09-13 ✅ 2025-09-14
  • Fix odin-drum ethernet connection ➕ 2025-09-15 ✅ 2025-09-19
  • Set up quick-start to cross compile on mac and then copy to specific machine using Justfile ➕ 2025-09-13 ✅ 2025-09-19
  • Put new SD card in odin-ship ➕ 2025-09-15 ✅ 2025-09-25
  • Configure SD card in odin-ship ➕ 2025-09-25 ✅ 2025-09-25
  • Take odin-ship off of WiFi ➕ 2025-09-25 ✅ 2025-09-26
  • Create a service file template for prop controllers ➕ 2025-09-13 ✅ 2025-09-26
  • Make cmd messages set the prop state and publish ➕ 2025-09-13 ✅ 2025-09-26
  • Update the HashMap when the state of the axes changes ➕ 2025-09-11 ✅ 2025-09-26
  • Create script to turrn off WiFi for a prop controller ➕ 2025-09-08 ✅ 2025-09-26
  • Refactor code to put stuff into self methods ➕ 2025-09-26 ✅ 2025-09-26
  • Ensure prop servers output version number when starting ➕ 2025-09-25 ✅ 2025-09-26
  • Increment patch number when doing deployments ➕ 2025-09-25 ✅ 2025-09-26
  • Write out name of controller from the clap information as first log message ➕ 2025-09-13 ✅ 2025-09-26
  • Add code to reset the latch after configurable amount of time (1 sec default) ➕ 2025-09-26 ✅ 2025-09-26
  • Debug why the single_instance code is not working! ➕ 2025-09-25 ✅ 2025-09-26
  • Merge common changes into rust_prop_quickstart ➕ 2025-09-26 ✅ 2025-09-26
  • Create the odin-ctrl project ➕ 2025-09-14 ✅ 2025-09-27
  • Install odin-ctrl on eg-1 and setup to build it there ➕ 2025-09-14 ✅ 2025-09-27
  • odin-axe ✅ 2025-10-05
  • Fix dnsmasq issue on eg-1 ➕ 2025-10-05 ✅ 2025-10-05
  • Install Caddy on eg-1 ➕ 2025-10-05 ✅ 2025-10-05
  • Create feast room lighting page ➕ 2025-10-05 ✅ 2025-10-23
  • Take odin-av off of WiFi ➕ 2025-09-15 ✅ 2025-10-23
  • Test that rust-analyzer in VS Code works with just the settings.json value set ➕ 2025-10-23 ✅ 2025-10-23
  • Remove all config.toml files ➕ 2025-10-23 ✅ 2025-10-23
  • Set RUSTFLAGS environment variable for builds in the Justfile and test ➕ 2025-10-23 ✅ 2025-10-23
  • Fix prop control install scripts ➕ 2025-10-23 ✅ 2025-10-23
  • Move odin-ctrl install and deploy scripts to Justfile ➕ 2025-10-23 ✅ 2025-10-23
  • Ensure all prop controllers send actual state after initialization ➕ 2025-10-19 ✅ 2025-10-23
  • Add icons for macOS and web ➕ 2025-10-19 ✅ 2025-10-24
  • Make sure each dashboard tab requests state when it loads ➕ 2025-10-23 ✅ 2025-10-24
  • Get odin-axe controller ping working end-to-end ➕ 2025-10-18 ✅ 2025-10-25
  • Send the system state on a timer from odin-ctrl instead of as it comes in ➕ 2025-10-25 ✅ 2025-10-25
  • Make prop controller status update time a config setting ➕ 2025-10-25 ✅ 2025-10-25
  • Add prop controller status for all other prop controllers ➕ 2025-10-24 ✅ 2025-10-26
  • Ensure odin-ctrl requests full state from all prop controllers 3 seconds after it starts ➕ 2025-10-18 ✅ 2025-10-26
  • Label the unused switch that now lights the table ➕ 2025-10-26 ✅ 2025-10-26
  • Put a GridView in the lighting tab ➕ 2025-10-26 ✅ 2025-10-29
  • Remove the arrays from the Lighting controller messages and use named fields ➕ 2025-10-29 ✅ 2025-10-30
  • Remove the chandelier solenoid out of the lighting tab ➕ 2025-10-20 ✅ 2025-10-30
  • Add unique nav bar icons for all the puzzles ➕ 2025-11-02 ✅ 2025-11-13
  • Create AsyncAwaiter widget centered flutter_spinkit spinner and message ➕ 2025-10-30 ✅ 2025-11-13
  • Position the drums ➕ 2025-11-13 ✅ 2025-11-13
  • Add code to drive tree lights in odin_tree ➕ 2025-11-06 ✅ 2025-11-13
  • Move code into the odin_prop_util from odin_prop_msg ➕ 2025-12-09 ✅ 2025-12-09
  • Fix the Justfile to label builds correctly ➕ 2025-12-09 ✅ 2025-12-09
  • Configure scripting on odin-ctrl ➕ 2025-12-09 ✅ 2025-12-09
  • Add code to receive commands from script and forward ➕ 2025-12-09 ✅ 2025-12-13
  • Update prop and game controllers ➕ 2025-12-13 ✅ 2025-12-13
  • Copy auto pilot code over from the simulator ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot UI in the app ➕ 2025-12-13 ✅ 2025-12-23
  • Get auto pilot triggering the axe puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the table puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the ship puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the bird puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the horse puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the bear puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the fish puzzle ➕ 2025-12-14 ✅ 2025-12-23
  • Get auto pilot triggering the fireplace ➕ 2025-12-14 ✅ 2025-12-23
  • Test EG room cameras ➕ 2025-07-06 ✅ 2025-12-23
  • Test EG speakers with audio-forwarder ➕ 2025-09-15 ✅ 2025-12-23
  • Test Memir speakers with audio-forwarder ➕ 2025-10-23 ✅ 2025-12-23
  • Test EG microphone with audio-forwarder ➕ 2025-09-15 ✅ 2025-12-23
  • Get crank count code working on odin_right ➕ 2025-11-05 ✅ 2025-12-23
  • Add the crank count to the fireplace UI ➕ 2025-10-31 ✅ 2025-12-23
  • Add room_on state to the game.controller.state message and set when all prop controllers are alive ➕ 2025-10-20 ✅ 2025-12-23
  • Update UI based on room_on state ➕ 2025-10-20 ✅ 2025-12-23
  • Re-install the knocker in the wall ➕ 2025-12-26 ✅ 2025-12-26

Notes

Debug msgpack encoded messages on NATS using:

nats sub --translate 'mpk --to-json' prop.<prop-host>.state

You can also create a debug build of the the prop controller that uses to_vec_named to add field names to the structure.

References

!odin_left_middle_right.png.jpeg

System Ping

  • The room is expected to be started in the following order - game controller then prop controllers and user interface.
  • When a prop controller starts it will connect to the NATS server, and once successful will immediately send a system state message, updating the game controllers alive/dead state for that prop controller.
  • The prop controller system state ping interval defaults to 60 seconds.
  • The system service on the game controller will send a request for full state to all prop controllers when it starts. This is to handle situations where the room is running and the game controller needs to be restarted.
  • The system service keeps a list of the last contact time for each of prop controllers. This time is updated each time a prop controller sends a system state message.
  • Every 60 seconds (by default) the system service goes through the contact times and checks to see if the last contact time from any prop controller is greater than twice that, i.e. 120 seconds. If so it marks the prop controller as dead.
  • The system server will only send out changes to the alive/dead status of systems if anything changes to avoid unnecessary network traffic.