From b0318f13ae78f85d272be41177ebb62fa4ea937a Mon Sep 17 00:00:00 2001 From: John Lyon-Smith Date: Sat, 11 Jul 2026 16:48:59 -0700 Subject: [PATCH] vault backup: 2026-07-11 16:48:59 --- Projects/BBB/Big Brain Bonanza Build Out.md | 24 ++ Projects/Escape Gallery Electrical.md | 236 ++++++++++++ Projects/Escape Room Simulator.md | 120 ++++++ Projects/Game Show Room.md | 101 ++++++ Projects/IT/Apple Remote Device Management.md | 27 ++ .../IT/Escape Gallery New Security System.md | 35 ++ Projects/IT/Odins Dilemma Audio.md | 67 ++++ Projects/Knocker Puzzle v2.md | 17 + Projects/Odin's Dilemma Human Chain Puzzle.md | 35 ++ Projects/Odin's Dilemma Puzzle Wiring.md | 184 ++++++++++ Projects/Odins Dilemma Fireplace.md | 38 ++ Projects/Servo Latches.md | 35 ++ .../Escape Gallery Camera Software.md | 24 ++ .../Escape Gallery Control Software.md | 341 ++++++++++++++++++ Projects/Software/Escape Gallery Nextcloud.md | 17 + Projects/Software/Escape Room Escape Buddy.md | 40 ++ Projects/Time Clock.md | 44 +++ Projects/Viking Quest Walking Puzzle.md | 15 + 18 files changed, 1400 insertions(+) create mode 100644 Projects/BBB/Big Brain Bonanza Build Out.md create mode 100644 Projects/Escape Gallery Electrical.md create mode 100644 Projects/Escape Room Simulator.md create mode 100644 Projects/Game Show Room.md create mode 100644 Projects/IT/Apple Remote Device Management.md create mode 100644 Projects/IT/Escape Gallery New Security System.md create mode 100644 Projects/IT/Odins Dilemma Audio.md create mode 100644 Projects/Knocker Puzzle v2.md create mode 100644 Projects/Odin's Dilemma Human Chain Puzzle.md create mode 100644 Projects/Odin's Dilemma Puzzle Wiring.md create mode 100644 Projects/Odins Dilemma Fireplace.md create mode 100644 Projects/Servo Latches.md create mode 100644 Projects/Software/Escape Gallery Camera Software.md create mode 100644 Projects/Software/Escape Gallery Control Software.md create mode 100644 Projects/Software/Escape Gallery Nextcloud.md create mode 100644 Projects/Software/Escape Room Escape Buddy.md create mode 100644 Projects/Time Clock.md create mode 100644 Projects/Viking Quest Walking Puzzle.md diff --git a/Projects/BBB/Big Brain Bonanza Build Out.md b/Projects/BBB/Big Brain Bonanza Build Out.md new file mode 100644 index 0000000..9ab02e8 --- /dev/null +++ b/Projects/BBB/Big Brain Bonanza Build Out.md @@ -0,0 +1,24 @@ +--- +active: true +tags: project +created: 2026-03-29 11:13 +--- +## Goal + +Build a game show room. +## Tasks + +- [x] Tape out the room ➕ 2026-03-29 ✅ 2026-03-29 +- [x] Build a 3d model of the room in Fusion ➕ 2026-03-29 ✅ 2026-04-11 +- [x] Decide on building approach ➕ 2026-03-29 ✅ 2026-05-22 +- [x] Insulate the walls ➕ 2026-03-29 ✅ 2026-05-22 +- [x] Cover the lower walls with plywood ➕ 2026-03-29 ✅ 2026-05-22 +- [ ] Hang up the exit signs again ➕ 2026-05-22 +- [ ] Put down the plastic and floor boards ➕ 2026-05-22 +- [ ] Build the stage ➕ 2026-03-29 +- [ ] Build the podiums ➕ 2026-03-29 +- [ ] Install podium floor receptacles ➕ 2026-03-29 +- [ ] Put 4x 24V power supplies in the cupboard ➕ 2026-03-29 +- [ ] Install a plugs for the projector, TV and lights ➕ 2026-03-29 +## References + diff --git a/Projects/Escape Gallery Electrical.md b/Projects/Escape Gallery Electrical.md new file mode 100644 index 0000000..18dcc70 --- /dev/null +++ b/Projects/Escape Gallery Electrical.md @@ -0,0 +1,236 @@ +--- +active: false +tags: + - project + - eg +created: 2024-11-01 +--- +## Goal + +Rewire Poulsbo location with: + +- Lighting zones +- Wall and ceiling outlets +- One breaker for each room +- Conduit for future kitchen +- Control boxes for all rooms + +Set up escape room network hardware & software. + +- 8 ethernet cables for cameras (8W each = 64W) +- 3 for WiFi AP's (21W each = 63W) +- 5 ethernet cables for room controllers +- 5 ethernet cables for GM stations +- 1 ethernet for cable modem +## To Do + +- [x] Take USB switcher, HDMI cable, keyboard and mouse to the EG and hook up laptop ➕ 2025-04-06 ✅ 2025-04-06 +- [x] Install and configure new modem ➕ 2024-07-13 ✅ 2025-04-25 +- [x] Put track down wall for network and coax cable ➕ 2024-12-09 ✅ 2025-03-21 +- [x] Wire up AP's ➕ 2024-07-13 ✅ 2025-03-27 +- [x] Install WiFi AP's ➕ 2024-07-13 ✅ 2025-03-27 +- [x] Install and configure UniFi Gateway ➕ 2024-07-13 ✅ 2025-03-27 +- [x] Install the UPS ➕ 2025-03-02 ✅ 2025-03-27 +- [x] Run ethernet cable for cameras ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Run ethernet cable to each of the control boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Run ethernet cable to each of the WiFi AP's ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Cut out pieces for remaining 4 boxes ➕ 2025-03-02 ✅ 2025-03-04 +- [x] Pre-drill screw holes for screws in 4 boxes ➕ 2025-03-02 ✅ 2025-03-04 +- [x] Build server rack ➕ 2024-09-23 ✅ 2025-03-16 +- [x] Drill green light to remaining 4 boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Cut conduit, vent and fan holes in remaining 4 boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Attach plugs and 3/8" flex conduit to 4 boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Attach vents to 4 boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Attach fans to 4 boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Remove wall for in room #1 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #1 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #1 plug & switch boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Wire box #1 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Replace wall in room #1 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #3 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #3 plug & switch boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Wire box #3 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #4 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #4 plug & switch boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Wire box #4 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Remove wall in room #5 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #5 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install box #5 plug & switch boxes ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Wire box #5 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Replace wall in room #5 ➕ 2025-03-02 ✅ 2025-03-16 +- [x] Install wire racks in ceiling of Odin's Dilemma ➕ 2025-02-11 ✅ 2025-03-02 +- [x] Configure RingCentral ➕ 2025-02-13 ✅ 2025-02-13 +- [x] Order cable modem ⏫ ➕ 2024-11-03 ✅ 2024-12-01 +- [x] Order WiFi AP's ⏫ ➕ 2024-07-13 ✅ 2024-12-01 +- [x] Order router micro PC machine ⏫ ➕ 2024-07-13 ✅ 2024-12-01 +- [x] Order a battery backup device ⏫ ➕ 2024-07-13 ✅ 2024-12-01 +- [x] Order a network hub ➕ 2024-12-01 ✅ 2025-02-11 +- [x] Install plug in control box ➕ 2025-02-23 ✅ 2025-03-02 +- [x] Install green light in control box ➕ 2025-02-28 ✅ 2025-03-02 +- [x] Install power switch ➕ 2025-02-28 ✅ 2025-03-02 +- [x] Install light switch ➕ 2025-02-28 ✅ 2025-03-02 +- [x] Attach control box to the wall ➕ 2025-02-23 ✅ 2025-03-02 +- [x] Mark exit signs with broken lights ➕ 2025-02-11 ✅ 2025-02-16 +- [x] Put all exit signs back up ➕ 2025-02-11 ✅ 2025-02-16 +- [x] Install switch to both ends of the control room ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install switch at the end of room 5 for meeting room lights ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install plug on room 5 outer wall ✅ 2025-01-31 +- [x] Install room 1 exit signs ➕ 2024-12-11 ✅ 2025-01-31 +- [x] Install room 2 exit signs ➕ 2024-12-11 ✅ 2025-02-11 +- [x] Install room 3 exit signs ➕ 2024-12-11 ✅ 2025-02-11 +- [x] Install room 4 exit signs ➕ 2024-12-11 ✅ 2025-02-11 +- [x] Install room 5 exit signs ➕ 2024-12-11 ✅ 2025-02-11 +- [x] Install front door exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install back door exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install back hallway exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install middle hallway exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install front hallway exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install control room front exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Install control room back exit sign ➕ 2025-01-14 ✅ 2025-01-31 +- [x] Electrical inspection ➕ 2025-01-17 ✅ 2025-01-31 +- [x] Install kitchen conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 1 conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 1 wiring ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 1 lights ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 2 conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 2 wiring ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 2 lights ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 3 conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 3 wiring ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 3 lights ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 4 conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 4 wiring ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 4 lights ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 5 conduit ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 5 wiring ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Install room 5 lights ➕ 2024-12-11 ✅ 2025-01-14 +- [x] Bend the back light conduit to go over back lights/power conduit ➕ 2024-12-16 ✅ 2024-12-29 +- [x] Install back hall/power wiring ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install back hall lights ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install toilet conduit ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install toilet light/switch/fan/plug ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install utility room conduit ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install utility light/switch ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install meeting conduit ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install meeting wiring ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install meeting lights ➕ 2024-12-20 ✅ 2024-12-29 +- [x] Install escape room conduit to breaker ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install kitchen conduit to breaker ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install kitchen conduit ➕ 2024-12-11 ✅ 2024-12-29 +- [x] Install control room lights ✅ 2024-12-14 +- [x] Install front/front hallway/middle hallway lights ➕ 2024-12-11 ✅ 2024-12-14 +- [x] Install back conduit to breaker ➕ 2024-12-11 ✅ 2024-12-14 +- [x] Add back lighting/meeting area lighting circuit artboard ➕ 2024-12-09 ✅ 2024-12-20 +- [x] Add back power circuit artboard ➕ 2024-12-09 ✅ 2024-12-20 +- [x] Add meeting area power artboard ➕ 2024-12-09 ✅ 2024-12-20 +- [x] Buy more collars, black/white 12 AWG wire, pack of screw drivers, deWalt driver bits ➕ 2024-12-14 ✅ 2024-12-20 +- [x] Return 4" boxes and covers to Silverdale ➕ 2024-11-23 ✅ 2024-12-20 +- [x] Install back hall lighting/power conduit ➕ 2024-12-11 ✅ 2024-12-20 +- [x] Move the heating circuit up and above the rafters ➕ 2024-11-26 ✅ 2024-12-09 +- [x] Get a big printout of the wiring diagram ➕ 2024-11-26 ✅ 2024-12-09 +- [x] Move the outside light circuit up above the rafters ➕ 2024-11-26 ✅ 2024-12-09 +- [x] Remove the conduit around the lighting circuits ➕ 2024-11-26 ✅ 2024-12-09 +- [x] More 4" boxes with earth connectors ➕ 2024-12-02 ✅ 2024-12-09 +- [x] Flat nailing plates ➕ 2024-11-23 ✅ 2024-12-02 +- [x] Get a large printout of the electrical plan ➕ 2024-11-22 📅 2024-11-25 ✅ 2024-12-02 +- [x] 22 4" boxes with earth nub ➕ 2024-11-23 ✅ 2024-12-02 +- [x] Tool belt for Carmen ➕ 2024-11-23 ✅ 2024-12-02 +- [x] Count how many big light fixtures are in the space now ➕ 2024-11-01 ✅ 2024-11-02 +- [x] How far apart or the roof joists and how many? ➕ 2024-11-01 ✅ 2024-11-02 +- [x] What is power draw of the light fixtures? ➕ 2024-11-01 ✅ 2024-11-02 +- [x] How many big lights on each circuit right now? ➕ 2024-11-01 ✅ 2024-11-02 +- [x] What is the power draw of the small can light fixtures? ➕ 2024-11-01 ✅ 2024-11-02 +- [x] Order cameras 🔺 ➕ 2024-09-23 ✅ 2024-10-30 +- [x] Watch videos on how to bend EMT conduit 🔺 ➕ 2024-11-06 ✅ 2024-11-22 +- [x] Apply for the L&I permit for the space and display 🔺 ➕ 2024-11-06 ✅ 2024-11-22 +- [x] Remove the light switch circuit from beside he breaker box. ✅ 2024-11-22 +- [x] Open breaker box and remove all the stuff on the left side of the box ✅ 2024-11-23 +- [x] Add water heater to drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Add all control room outlets to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Add all lighting conduit and junction box runs to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Add circuits for each puzzle room to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Add meeting area, reception and back hall outlets to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Add location of cameras to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [-] Add location of existing conduit runs to the drawing ➕ 2024-11-01 ❌ 2024-11-22 +- [x] Add location of the exit signs to the drawing ➕ 2024-11-01 ✅ 2024-11-22 +- [x] Order concrete screws ➕ 2024-11-03 ✅ 2024-11-22 +## Notes + +Always power to switch first. +Every switch & plug must have a neutral wire in the box. +OK to use conduit as ground. +Lights and plugs on separate circuits +Every power line from a breaker must have a matching neutral line. +Exit signs must be fed by the lighting circuits, ahead of any switching. + +30 joists, 32" on center. + +Power draw of lights is between 50W and 65W each. + +There are 54 big light fixtures and 8 small light fixtures. There are currently 46 big light fixtures currently. Kitchen will require at least 6 circuits all 20A with 12/2 NM and GFCI/AFCI: + +- Fridge +- Dishwasher +- Garbage Disposal +- Microwave Oven +- Small Appliance #1 +- Small Appliance #2 + +A cook top requires: + +- 220V/50A 6/3 NM cable + +Separate circuit for the alarm and camera system. + +16 exit sign lights. + +![[Breaker Labels.pdf]] +## References + +- [Multiwire Branch Circuit - Electrical 101](https://www.electrical101.com/multiwire-branch-circuit.html) +- [National Electrical Code - Multiwire Branch Circuit - Transworld Electric](https://twielectric.com/national-electrical-code-multiwire-branch-circuit) +- https://learnmetrics.com/how-many-outlets-on-a-15-amp-20-amp-30-amp-circuit-nec/ +- https://www.indeed.com/career-advice/finding-a-job/religious-degree-jobs +- https://www.amazon.com/Sunco-Selectable-Temperature-Dimmable-Dustproof/dp/B0BWLH379Z +- [How Many Outlets On A 15 Amp, 20 Amp, 30 Amp Circuit? (NEC 210.21)](https://learnmetrics.com/how-many-outlets-on-a-15-amp-20-amp-30-amp-circuit-nec) +- [Electrical Circuit Requirements for Kitchens](https://www.thespruce.com/kitchen-wiring-circuits-1152911) +- https://www.bradyid.com/resources/wiring-color-codes +- https://lni.wa.gov/licensing-permits/electrical/electrical-permits-fees-and-inspections/purchase-permits-request-inspections +- https://www.lni.wa.gov/forms-publications/F500-109-000.pdf +- https://www.wikihow.com/Install-Electrical-Conduits +- https://www.nema.org/docs/default-source/technical-document-library/steel-conduit-and-emt-proven-to-meet-the-nec-reg.pdf +- https://diy.stackexchange.com/questions/74977/is-an-explicit-ground-wire-required-through-steel-conduit +- https://www.homedepot.com/p/Southwire-500-ft-14-Gauge-White-Solid-CU-THHN-Wire-11580858/203401597 +### NFPA 70 NEC 2023 Extracts + +#### Connectors + +250.8 Connection of Grounding and Bonding Equipment. +(A) Permitted Methods. Equipment grounding conductors, +grounding electrode conductors, and bonding jumpers shall be +connected by one or more of the following means: +(1) Listed pressure connectors +(2) Terminal bars +(3) Pressure connectors listed ao; grounding and bonding +equipment +(4) Exothermic welding processes; +(5) Machine screw-type fasteners that engage not Jcs. o; than +two thrcado; or arc secured "ith a nut +(6) Thread-forming machine screws dtal engage not lcs. o; than +two threads; in dlc enclosure +(7) Connections that arc part of a listed a"l.o;cmbly +(8) Othcr listed means +(B) Methods Not Permitted. Connection devices or fittings +that depend solely on solder shall not be used. + +### Control Boxes + +- https://www.amazon.com/Nilight-90014E-Rocker-Toggle-Warranty/dp/B07QKFD7Z7 +- https://www.amazon.com/DaierTek-125VAC-Waterproof-Automotive-Aircraft/dp/B07T6YNRZS + +### WiFi + +- Escape Gallery WiFi password - `Berserker!` +- [Packet Sender - Free utility to for sending / receiving of network packets. TCP, UDP, SSL.](https://packetsender.com/) +- [ARRIS Surfboard S33 DOCSIS 3.1 Multi-Gigabit Cable Modem](https://www.amazon.com/gp/product/B08FMSC5WZ) +- [Manage your APC battery backup system with this Linux command](https://opensource.com/article/21/12/linux-apcupsd) diff --git a/Projects/Escape Room Simulator.md b/Projects/Escape Room Simulator.md new file mode 100644 index 0000000..9b7f09a --- /dev/null +++ b/Projects/Escape Room Simulator.md @@ -0,0 +1,120 @@ +--- +active: true +tags: + - project + - eg +created: 2025-01-13 10:59 +--- +## Goal + +Create a simulator with: + +- Puzzle controller RPi + - Push button puzzle + - Locked box using solenoid with internal lights + - Sounds + - Firewall + - NATS +- 24VDC power supply with power take-off for testing external puzzles +- Room controller RPi + - Server software + - Web UI +- Ethernet hub between controller and puzzles +## Active Tasks + +- [ ] Re-wire the 5V/12V power to the PWM board ➕ 2026-01-11 +- [ ] Add another light to the top of the board with a MOSFET ➕ 2026-02-07 +- [ ] Finish merging control code from `odin` back to the simulator ➕ 2025-12-28 +- [ ] Finish creating a simple puzzle code using buttons➕ 2025-04-03 +- [ ] Check all logging and and ensure consistency ➕ 2026-01-04 +- [ ] Make a latch for the box ➕ 2026-01-26 +- [ ] Install lip and LED lights in locked box ➕ 2025-02-22 +- [ ] Add MOSFET switch for the latch ➕ 2025-12-07 +- [ ] Rewire 12V power to a MOSFET switch ➕ 2025-12-07 +- [ ] Add sound effects that can be played ➕ 2025-12-08 +- [ ] Install handles on the box ➕ 2025-05-30 +- [ ] Install servo latch in box ➕ 2025-04-29 +- [ ] Create simple puzzle using RFID readers ➕ 2025-05-31 +## Future Tasks + +- [ ] Install an ADC with a touch puzzle ➕ 2026-01-11 +- [ ] Design a case for the LED panel ➕ 2025-12-28 +- [ ] Design a case for the LEDs ➕ 2025-12-28 +- [ ] Rewire the power to the I2C PWM module ➕ 2025-12-07 +- [ ] Add optical sensor to the simulator ➕ 2025-11-06 +- [ ] Add sound sensor to the simulator ➕ 2025-12-08 +## Archived Tasks + +- [x] Install the switch/plug box on the simulator ➕ 2026-02-04 ✅ 2026-02-06 +- [x] Re-install a power supply for `sim-ctrl` ➕ 2026-01-11 ✅ 2026-02-04 +- [x] Create Flutter app to monitor puzzle ➕ 2025-04-03 ✅ 2025-12-07 +- [x] Install RFID readers next to buttons ➕ 2025-03-31 ✅ 2025-12-07 +- [x] Install colored LEDs above the buttons with resin ➕ 2025-04-18 ✅ 2025-12-07 +- [x] Create puzzle controller setup scripts and check in to source control ➕ 2025-05-21 ✅ 2025-06-03 +- [x] Setup RPi development system ➕ 2025-05-14 ✅ 2025-06-03 +- [x] Create model for holding the NVRAM SSD for the development RPi 4 ➕ 2025-05-29 ✅ 2025-05-31 +- [x] Solder a new GPIO v3 board ➕ 2025-05-30 ✅ 2025-06-02 +- [x] Create an RFID reader box ➕ 2025-03-31 ✅ 2025-05-30 +- [x] Install false bottom in lock box ➕ 2025-04-29 ✅ 2025-05-30 +- [x] Design and print 12VDC power supply end cover ➕ 2025-01-13 ✅ 2025-05-04 +- [x] Reflash the RPi with new WiFi password ➕ 2025-04-29 ✅ 2025-05-04 +- [x] Install some buttons ➕ 2025-01-13 ✅ 2025-04-29 +- [-] Route a channel for LED light lip in box ➕ 2025-01-16 ❌ 2025-04-29 +- [x] Figure out which 12VDC relay to use with RPi ➕ 2025-01-31 ✅ 2025-04-29 +- [x] Design box for 12VDC relay ➕ 2025-01-17 ✅ 2025-04-29 +- [x] Configure `nftables` for `sim-ctrl` ➕ 2025-03-31 ✅ 2025-04-03 +- [x] Disable WiFi connection on `sim-ctrl` ➕ 2025-03-30 ✅ 2025-04-03 +- [x] Test `ssh` tunneling through to `sim-puz1` ➕ 2025-02-22 ✅ 2025-04-03 +- [x] Install NATs server on `sim-ctrl` ➕ 2025-04-03 ✅ 2025-04-03 +- [x] Test pub/sub from puzzle machine ➕ 2025-04-03 ✅ 2025-04-03 +- [x] Configure `dnsmasq` on `sim-ctrl` and configure DHCP and DNS ➕ 2025-02-22 ✅ 2025-03-30 +- [x] Install mag lock box to simulator ➕ 2025-01-13 ✅ 2025-03-16 +- [x] Install Ubuntu on `sim-room` controller ➕ 2025-02-22 ✅ 2025-02-24 +- [x] Rename system to `sim-room` ➕ 2025-02-24 ✅ 2025-02-24 +- [x] Configure `sim-room` WiFi for `Valhalla` ➕ 2025-02-22 ✅ 2025-02-24 +- [x] Configure static IP on `eth0` ➕ 2025-02-24 ✅ 2025-03-16 +- [x] Install Raspian on `sim-puzzle-1` controller ➕ 2025-02-22 ✅ 2025-03-16 +- [x] Design and print 12VDC mounting brackets ➕ 2025-01-13 ✅ 2025-01-13 +- [x] Design and print mounting bracket for RPi units ➕ 2025-01-13 ✅ 2025-01-13 +- [x] Install 12VDC power supply ➕ 2025-01-13 ✅ 2025-01-14 +- [x] Design and print network switch holder ➕ 2025-01-14 ✅ 2025-01-14 +- [x] Install outlet with 12VAC plug ➕ 2025-01-13 ✅ 2025-01-16 +- [x] Install controller RPi ➕ 2025-01-13 ✅ 2025-01-16 +- [x] Install ethernet switch ➕ 2025-01-13 ✅ 2025-01-16 +- [x] Design better box for buck converters ➕ 2025-01-13 ✅ 2025-01-17 +- [x] Design better box for puzzle RPi breakout board ➕ 2025-01-17 ✅ 2025-01-31 +- [x] Install 12VDC bus bars ➕ 2025-01-17 ✅ 2025-01-31 +- [x] Install puzzle RPi ➕ 2025-01-13 ✅ 2025-01-31 +- [x] Install breakout board for puzzle RPi ➕ 2025-01-13 ✅ 2025-01-31 +- [x] Install buck converter for 5VDC power for puzzle RPi ➕ 2025-01-13 ✅ 2025-01-31 +- [x] Install a buck converter for 5VDC power to controller RPi ➕ 2025-01-13 ✅ 2025-01-31 +- [x] Make a network cable from hub to controller RPi ➕ 2025-01-31 ✅ 2025-02-06 +- [x] Make a network cable from hub to puzzle RPi ➕ 2025-01-31 ✅ 2025-02-06 +- [x] Set two buck boards at 5VDC for 12VDC input ➕ 2025-01-31 ✅ 2025-02-06 +- [x] Make a cable from power bar to controller RPi buck board ➕ 2025-01-31 ✅ 2025-02-06 +- [x] Make a cable from power bar to puzzle RPi ➕ 2025-01-31 ✅ 2025-02-06 +- [x] Build the mag lock box ➕ 2025-01-13 ✅ 2025-02-11 +- [x] Fix icon for UI ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Push to `git.mozayik.net` ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Install `sim-puz` ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Install `sim-ctrl` ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Get System tab working ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Get Lighting tab working ➕ 2025-12-07 ✅ 2025-12-07 +- [x] Test out Rhai scripting to see how to pass structures in and out ➕ 2025-12-10 ✅ 2025-12-13 +- [x] Finish the first button puzzle sequence ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Timeout the success and failure buttons ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Support unknown state when button sequence starts ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Now send completed or failed status back in state ➕ 2025-12-13 ✅ 2025-12-13 + +### Button Puzzle States + +```mermaid +stateDiagram-v2 + NotRunning --> Waiting + Waiting --> Error : timeout + Waiting --> Error : wrong button + Waiting --> Completed : last right button + Waiting --> Waiting : right button + Error --> NotRunning + Completed --> NotRunning +``` diff --git a/Projects/Game Show Room.md b/Projects/Game Show Room.md new file mode 100644 index 0000000..445a2a8 --- /dev/null +++ b/Projects/Game Show Room.md @@ -0,0 +1,101 @@ +--- +active: false +tags: project +created: 2026-02-21 12:57 +--- +## Goal + +- Jeopardy like game +- Family Feud like game +- $100,000 Pyramid like game + +Jeopardy is the core game. + +https://docs.google.com/presentation/d/11GSoVesazdhYPqDCpVx_RwUaK4nrfr4gqpAxccWkvQw/edit?usp=sharing +### Jeopardy + +Jeopardy! is a quiz game featuring ==three rounds (Jeopardy!, Double Jeopardy!, Final Jeopardy!) where clues are presented as answers, requiring responses in the form of a question (e.g., "Who is...?", "What is...?"). It uses a board of 6 categories with 5 clues each, increasing in dollar value/difficulty== + +AI Overview + +Jeopardy! is a quiz game featuring ==three rounds (Jeopardy!, Double Jeopardy!, Final Jeopardy!) where clues are presented as answers, requiring responses in the form of a question (e.g., "Who is...?", "What is...?"). It uses a board of 6 categories with 5 clues each, increasing in dollar value/difficulty==.  + +This video shows how to set up and play a Jeopardy-style game in PowerPoint: +Your Learning Career + +Jeopardy! primarily uses the font ==**[ITC Korinna](https://www.google.com/search?client=firefox-b-1-d&q=ITC+Korinna&mstk=AUtExfDJODEm5wJsSy8HBO4UOOOfSK7e4io8CFscCtgvwxJT1ks_RavWaW0rbLMcyblmvlDtHkmQkm_Yyz1Lvt-2f0UWdn9_2efPOab6owCkiUd7HchqZ9pJH6aq47XFx9Lyx1JGRSon2wn2BF2DqVItdrcmXEF1y_DnsEFibjv8m3RC2X0&csui=3&ved=2ahUKEwj65Pypi-uSAxUGkGoFHaXLC2QQgK4QegQIARAD)**== (specifically Bold and Weighted variants) for its clue text, a tradition that has continued since the daily syndicated show began in 1984. The, category titles and dollar amounts on the game board often use a different font, such as **Swiss 921 BT** or similar compressed sans-serif fonts.  + +https://font.download/font/itc-korinna-std + +**Key Details About_ + +Jeopardy! + +_Fonts:**  + +- **Clue Font:** ITC Korinna. +- **Board/Category Font:** Swiss 921 BT (often used for, headings and dollar amounts). +- **Style Tips:** To replicate the _Jeopardy!_ look, use white, all-caps text with a, subtle drop shadow, centered both horizontally and vertically. +- **Alternatives:** If you cannot access Korinna, alternatives like **Cheltenham** are sometimes suggested, although Korinna is the standard. + +**Key Components and Rules** + +- **The Format:** The host provides a clue (answer), and the contestant must respond with the correct question. +- **Game Board:** Features 6 categories, each with 5 clues ranging from $200 to $1000. +- **Rounds:** + - **Jeopardy!:** First round, standard values. + - **Double Jeopardy!:** Second round, clue values are doubled. + - **Final Jeopardy!:** A final clue where contestants wager their accumulated winnings before seeing the clue. +- **Gameplay:** A contestant selects a category and value. The first to buzz in gets to respond. Correct answers add to their total and allow them to pick the next clue. Incorrect answers deduct the value. +- **Daily Double:** Hidden clues in the board that allow the contestant to wager up to their current total (or up to the maximum clue value in that round).  + +**Common Uses** + +- **Classroom/Training:** Used for educational review,, allowing for customized topics, images, and sounds. +- **Virtual/Team Building:** Played using virtual boards (e.g., [Figma](https://www.figma.com/templates/jeopardy-template/), [Miro](https://miro.com/templates/jeopardy-game-board/)) with 2-3 teams and a moderator. +- **Tools:** Common, free templates are available for [PowerPoint](https://www.youtube.com/watch?v=l6Y3aCRLEgE), [Google Slides](https://www.youtube.com/watch?v=5yczlWqUI6I), and [JeopardyLabs](https://jeopardylabs.com/). +### $100,000 Pyramid + +The Pyramid game show features two teams, each with a contestant and a celebrity, playing a word-association game against a timer. + +Players choose categories, and one partner gives clues for seven items within 30 seconds. The team with the highest score advances to the "$100,000" Winner's Circle, where they must get six categories in 60 seconds. + +**Main Game Rules** + +- **Gameplay:** Six categories are displayed in a pyramid. Teams take turns choosing a category, often phrased as a pun (e.g., "Things that are blue"). +- **Clue Giving:** One player provides clues, while the other guesses. You cannot say the word itself, rhyme with it, use gestures, or use prepositions. +- **Scoring:** 1 point for each correct answer out of 7, with 30 seconds on the clock. +- **Passing:** Teams can "pass" on a word but cannot return to it once passed. +- **Winning the Main Game:** The team with the highest score after all rounds wins and advances to the winner's circle. + +### Family Feud + +AI Overview + +[ + +Family Feud + +](https://www.google.com/search?client=firefox-b-1-d&q=Family+Feud&mstk=AUtExfAg9fYykXgj6MlwFL8HC0Eqo1XG_g3SJ45RRxSLaA2QrteNMQWR7c5QeYdAByBWPHYDTsvklYg5Ih-Tw1NVxt_2FM15YgeSink1a8WrFVM8IXuw9_CcBznI6h_qrflgn68&csui=3&ved=2ahUKEwitguTFheuSAxXDnCYFHWV0DRIQgK4QegQIARAB)is a game where ==two teams of five compete to guess the most popular answers to survey questions asked of 100 people==. The goal is to reach 300 points by winning rounds, which feature face-offs, strikes for wrong answers, potential steals, and doubled/tripled point values in later rounds. The winning team plays "[Fast Money](https://www.google.com/search?client=firefox-b-1-d&q=Fast+Money&mstk=AUtExfAg9fYykXgj6MlwFL8HC0Eqo1XG_g3SJ45RRxSLaA2QrteNMQWR7c5QeYdAByBWPHYDTsvklYg5Ih-Tw1NVxt_2FM15YgeSink1a8WrFVM8IXuw9_CcBznI6h_qrflgn68&csui=3&ved=2ahUKEwitguTFheuSAxXDnCYFHWV0DRIQgK4QegQIARAD)" for a cash prize.  + +**Core Game Rules** + +- **The Face-Off:** One member from each team approaches the podium for a question. The first to buzz in with a correct answer (or the higher-ranked answer) wins control for their team. +- **Playing or Passing:** The winning team chooses to either "play" the question or "pass" it to the other team. +- **Playing the Board:** The team in control tries to guess all remaining answers on the board. Each team member offers one answer, usually in order. +- **Strikes and Steals:** If a team gives an answer not on the board, they get a strike (maximum of 3). If they get three strikes, the opposing team gets one chance to "steal" the points by guessing any remaining answer. +- **Points:** Points correspond to the number of survey participants who gave that answer (e.g., 40 people = 40 points). +- **Round Progression:** Points are doubled in round 3 and tripled in round 4. +- **Winning the Game:** The first team to reach 300 points wins the game.  + +**Fast Money Rules** + +- The winning team picks two members to play Fast Money. +- The first player has 20 seconds to answer 5 questions. +- The second player has 25 seconds to answer the same 5 questions, but cannot repeat the first player's answers. +- If the combined score is 200 points or more, they win the grand prize. +## Tasks + + +## References + diff --git a/Projects/IT/Apple Remote Device Management.md b/Projects/IT/Apple Remote Device Management.md new file mode 100644 index 0000000..5bb2c86 --- /dev/null +++ b/Projects/IT/Apple Remote Device Management.md @@ -0,0 +1,27 @@ +--- +active: true +tags: project +created: 2026-03-02 10:07 +--- +## Goal + +Configuring Mosyle software. + +- Be able to do remote OS update on the Mac Mini's +- Guest login on the iPads +## Tasks + +- [x] Upgrade the Mac Mini's to latests macOS ➕ 2026-01-18 ✅ 2026-04-13 +- [x] Basic config of Mosyle software ➕ 2026-01-18 ✅ 2026-04-13 +- [x] Figure out how to create and sign `.pkg` files ➕ 2026-04-13 ✅ 2026-04-13 +- [x] Sign up for Mosyle Business ➕ 2026-04-15 ✅ 2026-04-15 +- [x] Add Brioche to Escape Gallery device management ➕ 2026-04-13 ✅ 2026-05-22 +- [x] Add my two iPads to ABM and configure guest account ➕ 2026-04-13 ✅ 2026-05-22 +- [x] Configure Brioche Xcode with Escape Gallery provisioning certificates ➕ 2026-04-13 ✅ 2026-05-22 +- [ ] Create script to load and serve `.pkg` files from URL ➕ 2026-04-13 +- [ ] Switch to using the Escape Gallery profile and certificates ➕ 2026-04-13 +- [ ] Add Apple accounts for Eva and Cindi and check they can access ➕ 2026-04-13 +- [ ] Add Mosyle accounts for Eva and Cindi and check they can access ➕ 2026-01-18 + +## References + diff --git a/Projects/IT/Escape Gallery New Security System.md b/Projects/IT/Escape Gallery New Security System.md new file mode 100644 index 0000000..11ea9d6 --- /dev/null +++ b/Projects/IT/Escape Gallery New Security System.md @@ -0,0 +1,35 @@ +--- +active: true +tags: + - project + - eg +created: 2025-08-31 17:27 +--- +## Goal + +Configure ZoneMinder and run the security camera system from there. +## Tasks + +- [ ] Install the [ZoneMinder](https://zoneminder.com/) software ➕ 2025-08-31 +- [ ] Configure all the cameras ➕ 2025-08-31 + - [ ] Outside Back + - [ ] Bathroom + - [ ] Lobby + - [ ] Outside Front Left + - [ ] Outside Front Right + - [ ] Control + - [ ] Meeting + - [ ] Back Hall +- [ ] Create accounts for everyone ➕ 2025-08-31 + - [ ] Cindi + - [ ] Eva + - [ ] Carmen + - [ ] Bret (with just outside cameras) +- [ ] Configure zmNinja app +## References + +We have Reolink RLC-520A security cameras around the building and in the rooms. + +- [ZoneMinder](https://zoneminder.com/) +- [Mount units with Systemd](https://zoneminder.blogspot.com/p/blog-page.html) +- [zmNinja](https://zmninja.zoneminder.com/) diff --git a/Projects/IT/Odins Dilemma Audio.md b/Projects/IT/Odins Dilemma Audio.md new file mode 100644 index 0000000..952cf97 --- /dev/null +++ b/Projects/IT/Odins Dilemma Audio.md @@ -0,0 +1,67 @@ +--- +active: false +tags: + - project + - eg +--- +## Goal + +Find and install audio system for Odin's Dilemma. Includes speakers in both rooms, including sub-woofers. Microphones in both rooms that enable the GM to easily hear the room audio. Make sure background noises and music don't interfere with the microphones. + +![[amp_wiring_diagram_lg.gif]] + +## Notes + +| Camera Name | MAC | IPv4 | `eg-1` Control Port | `eg-1` UDP Port | Standard Port | +| ----------- | ------------------- | ------------- | ------------------- | --------------- | ------------- | +| `odin-av1` | `2c:cf:67:20:35:e9` | `10.10.0.83` | 14100 | 14101 | 1234 | +| `odin-av2` | `88:a2:9e:38:74:37` | `10.10.0.178` | 14200 | 14201 | 1234 | + +# To Do + +- [x] Order equipment ✅ 2025-06-11 + - [-] Sub-woofers ❌ 2025-06-27 + - [-] Sub-woofer amplifier ❌ 2025-06-27 + - [x] 4x Speakers ✅ 2025-06-11 + - [x] 4 channel amplifier ✅ 2025-06-11 + - [-] Capacitor ❌ 2025-06-11 + - [-] Power block ❌ 2025-06-11 + - [x] Fuse ✅ 2025-06-11 + - [x] Power wire ✅ 2025-06-11 + - [x] Speaker wire ✅ 2025-06-11 +- [x] Speaker connectors (for speaker boxes) ✅ 2025-06-11 +- [x] Make speaker cabinets ➕ 2025-06-23 ✅ 2025-06-23 +- [x] Install speaker terminals ➕ 2025-06-23 ✅ 2025-06-27 +- [x] Install speakers on the walls with mounts ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Wire up speakers to the control box ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Install amplifier in control box ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Instell `odin-av` in the control box ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Wire up speakers to `odin-av` ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Wire up microphone to `odin-av` ➕ 2025-06-23 ✅ 2025-07-21 +- [x] Configure the A/V hat on `odin-av` ➕ 2025-07-21 ✅ 2025-08-31 +- [x] Check all four speakers are working ➕ 2025-11-28 ✅ 2025-11-30 +- [x] Test sending to `odin-av1` speakers from Macbook ➕ 2025-07-21 ✅ 2025-11-30 +- [x] Test sending to `odin-av2` speakers from Macbook ➕ 2025-07-21 ✅ 2025-11-30 +- [x] Test receiving from `odin-av` microphone from Macbook ➕ 2025-07-21 ✅ 2025-11-30 +- [x] Install service on `odin-av1` ➕ 2025-11-30 ✅ 2025-11-30 +- [x] Install service on `odin-av2` ➕ 2025-11-30 ✅ 2025-11-30 +- [x] Figure out how to play music into the room ➕ 2025-11-30 ✅ 2025-11-30 +- [x] Test configuring audio to go through a filter for Memir ➕ 2025-11-30 ✅ 2025-12-26 +- [x] Check if the room microphone is configured properly ➕ 2025-11-30 ✅ 2026-01-22 +- [x] Make room microphone louder ➕ 2025-11-30 ✅ 2026-01-22 +- [x] Set room speaker levels ➕ 2025-12-26 ✅ 2026-01-22 +## References + +- [Using USB Microphones](https://www.tecnohub.org/2021/05/make-usb-microphone-using-raspberry-pi.html) +- [How to configure a InnoMaker RPi HiFi DAC Hat](https://howtohifi.com/how-to-innomaker-rpi-hifi-dac-hat-headless-raspberry-pi). +- [PlexAmp](https://www.plex.tv/plexamp) +- [RPi Audio Streaming](https://github.com/fkoester/raspberrypi-audio-streaming) +- [`mpg123`](https://www.mpg123.de/) +- [How to play MP3 on RPi](https://raspberrypi.stackexchange.com/questions/106734/how-do-you-open-a-mp3-file-from-the-raspberry-pi-terminal) +- [Sound configuration on Raspberry Pi with ALSA](https://blog.scphillips.com/posts/2013/01/sound-configuration-on-raspberry-pi-with-alsa) +- [Amazon.com: InnoMaker HiFi DAC HAT for Raspberry Pi 5/4/3B+/Zero | PCM5122 384kHz/32bit DAC Audio Card Expansion Board](https://www.amazon.com/Inno-Maker-Raspberry-PCM5122-Audio-Expansion/dp/B07D13QWV9) +- [Amazon.com: BOSS Audio Systems R1100M Monoblock Car Amplifier - 1100 High Output, 2-8 Ohm Stable, Low/High Level Inputs](https://www.amazon.com/Watts-Mosfet-Monoblock-Amplifier-R1100M/dp/B004S4XNEO) +- [How to set up InnoMaker RPI HIFI DAC hat for your Headless Raspberry Pi | How To Hi-Fi](https://howtohifi.com/how-to-innomaker-rpi-hifi-dac-hat-headless-raspberry-pi) +- [Amazon.com: MTX TNP212D2 1200W Dual Loaded Car Subwoofer Audio w/ Sub Box and Amplifier : Electronics](https://www.amazon.com/MTX-Terminator-TNE212D-200-Watt-Enclosure/dp/B003E35XGQ) +- [cpal - Rust](https://docs.rs/cpal/0.16.0/cpal/index.html) + diff --git a/Projects/Knocker Puzzle v2.md b/Projects/Knocker Puzzle v2.md new file mode 100644 index 0000000..16863f9 --- /dev/null +++ b/Projects/Knocker Puzzle v2.md @@ -0,0 +1,17 @@ +--- +active: false +tags: project +created: 2026-05-28 13:06 +--- +## Goal + +Create a better puzzle with the knocker + +## Tasks + +- [ ] Build knocker puzzle on the simulator ➕ 2026-05-28 +## References + +- [YouTube - Using machine learning for Morse code recognition](https://www.youtube.com/watch?v=B6wWs8IRY0E&t=15s) +- [Morse Code](https://www.bbc.co.uk/bitesize/articles/z4bm9ty#z9gxkhv) +- diff --git a/Projects/Odin's Dilemma Human Chain Puzzle.md b/Projects/Odin's Dilemma Human Chain Puzzle.md new file mode 100644 index 0000000..be9a5d2 --- /dev/null +++ b/Projects/Odin's Dilemma Human Chain Puzzle.md @@ -0,0 +1,35 @@ +--- +active: false +tags: + - project + - eg +created: 2025-07-21 14:08 +completed: 2025-08-30 +--- +## Goal + +Build a human chain puzzle between the Berserker heads. +## Tasks + +- [x] Test Berserker helmet resistance ➕ 2025-07-21 ✅ 2025-08-02 +- [x] Create a case for the ADC board ➕ 2025-07-21 ✅ 2025-08-02 +- [x] Design the resistor ladder circuit ➕ 2025-07-21 ✅ 2025-08-02 +- [x] Attach wires to the underside of the Berserker helmets ➕ 2025-07-21 ✅ 2025-08-02 +- [x] Install heads with plugs onto shelves ➕ 2025-07-21 ✅ 2025-08-02 +- [x] Create the resistor ladder circuit ➕ 2025-08-02 ✅ 2025-08-04 +- [x] Wire up an ADC board with Dupont pins ➕ 2025-07-21 ✅ 2025-08-30 +- [x] Test out the ADC/resistor circuit with the heads ➕ 2025-07-21 ✅ 2025-08-30 +- [x] Test that we can use the ADC board with the PWM board ➕ 2025-07-21 ✅ 2025-08-30 +- [x] Calibrate the resistance and the ADC ➕ 2025-07-21 ✅ 2025-08-30 +- [x] Install ADC board onto Tree of Life control board ➕ 2025-07-21 ✅ 2025-08-30 +## References + +- [[ADS1115 ADC Module]] +- https://www.instructables.com/How-to-Use-ADS1115-With-the-Raspberry-Pi-Part-1 +- https://forum.arduino.cc/t/human-chain-body-conductivity/634793/5 +- https://www.youtube.com/watch?v=m5PfKb8p1YI&t=667s +- https://www.patreon.com/c/playfultech/posts + +![[Pasted image 20250721140847.png]] + +![[Pasted image 20250721145033.png]] \ No newline at end of file diff --git a/Projects/Odin's Dilemma Puzzle Wiring.md b/Projects/Odin's Dilemma Puzzle Wiring.md new file mode 100644 index 0000000..1dadeac --- /dev/null +++ b/Projects/Odin's Dilemma Puzzle Wiring.md @@ -0,0 +1,184 @@ +--- +active: false +tags: + - project +created: 2025-02-16 14:51 +--- +## Goal + +Finish the Odin's Dilemma Room. + +- Design an axe puzzle +- Design compass puzzle +## Tasks + +### Control Box + +- [x] Put a 24V power supply on a board with cable➕ 2025-04-30 ✅ 2025-05-14 +- [x] Install a 24V distribution block ➕ 2025-05-13 ✅ 2025-05-15 +- [x] Install second rack ➕ 2025-05-13 ✅ 2025-05-15 +- [x] Install the TPLink switch and remove the Ubiquiti one ➕ 2025-05-19 ✅ 2025-05-30 +- [x] Install RPi in the server rack and connect to switch ➕ 2025-05-19 ✅ 2025-05-30 +- [x] Drill extra holes in rack mounting plate ➕ 2025-05-30 ✅ 2025-05-31 +- [x] Mount the RPi 4 onto the mounting plate with zip ties ➕ 2025-05-30 ✅ 2025-05-31 +- [x] Flash controller RPi SD card ➕ 2025-05-13 ✅ 2025-05-31 +- [x] Install 5V power for R1 RPi ➕ 2025-05-13 ✅ 2025-05-31 +- [x] Install RPi 4 in rack ➕ 2025-05-14 ✅ 2025-05-31 +- [-] Make map of the room and figure out how many RPi's, GPIO, buck boards, etc. and create a spreadsheet ➕ 2025-04-30 ❌ 2025-06-23 +- [x] Design a rack panel for 5 RPi 4s to mount onto ➕ 2025-05-30 ✅ 2026-02-04 +- [x] Send rack panel design to [SentCutSend](https://sendcutsend.com/) ➕ 2025-05-29 ✅ 2026-02-04 +- [x] Install `nftables` and configure ➕ 2025-05-30 ✅ 2026-02-04 +- [x] Install `dnsmasq` and configure ➕ 2025-05-30 ✅ 2026-02-04 +- [x] Create setup script ➕ 2025-05-30 ✅ 2026-02-04 +- [x] Install NATS and configure ➕ 2025-05-15 ✅ 2026-02-04 +### Timers + +- [x] Install RPi Zero for the ship control LED's ➕ 2025-06-02 ✅ 2026-02-04 +- [x] Add resistor to LED legs ➕ 2025-06-02 ✅ 2026-02-04 +- [x] Wire up LED's to the GPIO board ➕ 2025-06-02 ✅ 2026-02-04 +- [x] Make 5V torches from the flicker lights ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install torches around the room ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Wire up and install torch controller ➕ 2025-05-15 ✅ 2026-02-04 +### Viking Ship Puzzle + +- [x] Solder GPIO breakout board ➕ 2025-04-25 ✅ 2025-05-19 +- [x] Wire up 5V power ➕ 2025-04-21 ✅ 2025-05-19 +- [x] Flash SD card for `odin-ship` ➕ 2025-05-19 ✅ 2025-05-19 +- [x] Create repo for `odin-ship` ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Test that GPIO board pins are reading correctly ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Wire up the magnetic switches to the GPIO board ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Solder board for the 12V solenoid and LED power ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Install MOSFET for the 12V power to solenoid ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Install MOSFET for the 12V power to LED's ➕ 2025-05-19 ✅ 2025-05-31 +- [x] Connect power plug for solenoid and LED's ✅ 2025-05-31 +- [x] Configure DHCP and DNS & disable WiFi ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Write control service for `odin-ship` ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Remove and install latches in the hidden cupboards and test manual opening ➕ 2025-04-21 ✅ 2026-02-04 +### Axe Puzzle + +- [x] Configure network to use DHCP and DNS and disable WiFi ➕ 2025-06-23 ✅ 2026-02-04 +- [x] Code service for the axe puzzle connected to NATS server ➕ 2025-04-29 ✅ 2026-02-04 +- [x] Power up puzzle and test on the wall ➕ 2025-05-13 ✅ 2025-05-15 +- [x] Solder GPIO breakout board ➕ 2025-03-06 ✅ 2025-05-02 +- [x] Install LED's ➕ 2024-06-01 ✅ 2025-05-02 +- [x] Install power and switches ➕ 2025-04-25 ✅ 2025-05-02 +- [x] Install metal plate ➕ 2025-04-25 ✅ 2025-05-02 +### Horse Puzzle + +- [x] Screw carvings to piece of live edge ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Attach to the wall with screws ➕ 2025-05-13 ✅ 2025-06-23 +- [x] Hide screws ➕ 2025-05-13 ✅ 2025-06-23 +### Bird Puzzle + +- [x] Screw carvings to piece of live edge ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Attach to the wall with screws ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Hide screws ➕ 2025-05-13 ✅ 2026-02-04 +### Bear Puzzle + +- [x] Screw carvings to piece of live edge ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Attach to the wall with screws ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Hide screws ➕ 2025-05-13 ✅ 2026-02-04 +### Fish Puzzle + +- [x] Screw to piece of live edge ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Attach to the wall with screws ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Hide screws ➕ 2025-05-13 ✅ 2026-02-04 +### Throne Room Puzzle + +- [x] Install chain in wolf head shield ➕ 2025-04-21 ✅ 2025-05-13 +- [x] Install wolf head ➕ 2025-04-22 ✅ 2025-05-13 +- [x] Cut out eyes ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Make molds for eyes ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Put elastic in the chain to help it open more softly ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Make epoxy eyes with LED's in ➕ 2025-05-13 ✅ 2026-02-04 +- [x] Install latch to make door open ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Wire up LED's and latch ➕ 2025-05-13 ✅ 2026-02-04 +### Shields Decoration + +- [x] Create wedges to angle the shields ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Use existing center screw slots to attach shield to wedge and beam ➕ 2025-05-15 ✅ 2026-02-04 +### Table Puzzle + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Oar Barrel + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Chests + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Game Barrel + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Maze Bucket + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Horn Barrel + +- [x] Attach to sub-floor with screws ➕ 2025-05-15 ✅ 2026-02-04 +### Antlers + +- [x] Pre-mount skulls on a piece of live edge ➕ 2025-05-15 ✅ 2025-05-15 +- [x] Attach live edge to the wall ➕ 2025-05-15 ✅ 2025-05-15 +### Chandelier + +- [x] Hang from the ceiling on cross brace ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install wire for knife reward ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install latch for knife reward ➕ 2025-05-15 ✅ 2026-02-04 +### Nets and Ropes + +- [x] Screw anchor points to wall and attach ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Hide screws ➕ 2025-05-15 ✅ 2026-02-04 +### Mímir Clue System + +- [x] Mount on rope ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Hang from a hook on the wall ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Run wires through rope ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Light up eye with multi-color LED ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Install speaker in head ➕ 2025-05-19 ✅ 2026-02-04 +### Dragon Heads + +- [x] Install green LED's in eyes in dragon heads ➕ 2024-06-01 ✅ 2025-10-25 +- [x] Bolt to the head to the beam, or the wall above it ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install RFID readers with resin in dragons heads ➕ 2024-06-01 ✅ 2025-10-25 +- [x] Install latch on spear cabinet ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Make the spear cabinet ➕ 2025-04-06 ✅ 2025-04-12 +- [x] Install spear cabinet with latch and wire ➕ 2025-04-12 ✅ 2025-04-25 +### Helm Puzzle + +- [x] Create shelves for Berserker heads ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Install electronics and controller for the heads ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Screw the heads from the underside to the pedestal ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Create control software ➕ 2025-05-19 ✅ 2026-02-04 +### Hammer Puzzle + +- [x] 3D print a larger hand ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Screw to live edge board and mount ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install electronics for the hand ➕ 2025-05-15 ✅ 2026-02-04 +### Drum Puzzle + +- [x] Make a frame around the drums ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Drill holes for foliage ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Screw drums to the floor ➕ 2025-05-15\ ✅ 2026-02-04 +- [x] Wire the tree of life with LED's ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Wire up and install drum controller ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Run wires to the tree to power LED's ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Make LED's in tree flash in pattern ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Screw solid frame of the picture to the wall ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install LED's in the back of the tree ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Put a blue sky image on the back of the tree ➕ 2025-05-15 ✅ 2026-02-04 + +### Knocker Puzzle + +- [x] Make false wall with a panel in it ➕ 2025-05-15 ✅ 2025-05-15 +- [x] Install latch in the door ➕ 2025-05-15 ✅ 2026-02-04 +- [x] Install spring mechanism to open the door ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Install in the wall ➕ 2025-05-19 ✅ 2026-02-04 +- [x] Run wires to the puzzle controller ➕ 2025-05-19 ✅ 2026-02-04 +## References + +- Axe paint is Krylon Fusion All-in-One - Hammered Dark Bronze. +- [Homemade fake camp fire stage prop - Nicky kaboom - YouTube](https://www.youtube.com/watch?v=yeBWB6u29MU) +- [Incredible Fake Fire Prop DIY for Halloween](https://www.youtube.com/watch?v=hawEoJhNd-o) +- [How to build a faux fire - YouTube](https://www.youtube.com/watch?v=UrzWXmegdbY) +- https://www.amazon.com/SKYSEN-Hardware-Material-Combination-Install/dp/B0BCF2W6PQ +- ![[hidden-fireplace-door.jpg]] diff --git a/Projects/Odins Dilemma Fireplace.md b/Projects/Odins Dilemma Fireplace.md new file mode 100644 index 0000000..1aa8430 --- /dev/null +++ b/Projects/Odins Dilemma Fireplace.md @@ -0,0 +1,38 @@ +--- +active: false +tags: + - project + - eg +created: 2025-05-30 +completed: 2025-08-22 +--- +## Goal + +Create a fireplace that cranks open, but has a burning fire that crackles. +## Tasks + +- [x] Order parts for the crank and pegboard cogs ➕ 2025-05-30 ✅ 2025-05-30 +- [x] Purchase or find the 12V lighter connectors ➕ 2025-05-30 ✅ 2025-06-23 +- [x] Design the 12V lighter holder for the female side ➕ 2025-07-22 ✅ 2025-08-23 +- [x] Design the 12V lighter holder for the male side ➕ 2025-07-22 ✅ 2025-08-23 +- [x] Design the two cogs ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Order metal for the shafts ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Pick-up metal for the shafts ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Weld and shape the end of the crank shaft for the handle ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Print the cogs on the 3D printer ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Install cogs on the shafts ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Create the crank shaft and wall brackets ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Drill a straight through hole in the wall ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Install crank shaft in wall ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Install ratchet ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Install a powered lock on the fireplace to prevent it being opened too soon ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Design a mounting bracket for the 12V connectors ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Wire up the fire from the 12V connectors ➕ 2025-05-30 ✅ 2025-08-23 +- [x] Find crackling fireplace audio loop ➕ 2025-05-30 ✅ 2025-08-23 +## References + +- [Skill Set: How To Make Pinwheel Gear Patterns - Make:](https://makezine.com/article/workshop/skill-set-how-to-make-pinwheel-gear-patterns) +- [Two Methods for Making Pinwheels Patterns - Dug's Tips 3 - Cabaret Mechanical Theatre](https://cabaret.co.uk/two-methods-for-making-pinwheels-patterns-dugs-tips-3) +- [Wooden Circles for Your Automata Projects - Dug's Tips 2 - Cabaret Mechanical Theatre](https://cabaret.co.uk/wooden-circles-for-your-automata-projects-dugs-tips-2) +- https://www.onlinemetals.com/en/seattle +- [Making wooden gears out of plywood](https://woodgears.ca/gear_cutting/template.html) \ No newline at end of file diff --git a/Projects/Servo Latches.md b/Projects/Servo Latches.md new file mode 100644 index 0000000..b3a466e --- /dev/null +++ b/Projects/Servo Latches.md @@ -0,0 +1,35 @@ +--- +active: false +tags: + - project +created: 2025-05-30 +completed: 2025-06-21 +--- +## Goal + +Create door latches that use servos with more torque so that the latch will open under side pressure. + +- Must be able to open with side force of up to 30 Pa (kg/m2) +- Must be able to lock automatically on closing +- Must support access port to unlock manually from outside of otherwise sealed box +- Must only use power when unlocking +- Must be quiet in operation, no more than 20 dB +- Must be not cost more than $25 per lock +- Duty cycle of 20 opens/closes per day +- Must be made from readily available parts (just in time delivery) +- Can be level, edge or PWM triggered with a 5VDC signal +- Power can be supplied separately up to 24VDC +- Must be no more than 100mm x 50mm x 50mm in size +- Latch throw must be at least 10mm +## Tasks + +- [x] Order servos ➕ 2025-05-30 ✅ 2025-05-30 +- [x] Order springs ➕ 2025-05-30 ✅ 2025-05-30 +- [x] Create a circuit to test the latch using PWM pins on the RPi ➕ 2025-05-30 ✅ 2025-06-03 +- [x] Test that the servo can open under side pressure ➕ 2025-05-30 ✅ 2025-06-03 +- [-] Create `SoftPwm` class and use it to drive the servo ➕ 2025-06-04 ❌ 2025-06-18 +- [-] Design a housing for the latch that the servo can attach too ➕ 2025-05-30 ❌ 2025-06-18 +## References + +- [MG-90S Micro Servo Datasheet](https://www.electronicoscaldas.com/datasheet/MG90S_Tower-Pro.pdf) + diff --git a/Projects/Software/Escape Gallery Camera Software.md b/Projects/Software/Escape Gallery Camera Software.md new file mode 100644 index 0000000..d1e00e8 --- /dev/null +++ b/Projects/Software/Escape Gallery Camera Software.md @@ -0,0 +1,24 @@ +--- +active: true +tags: project +created: 2026-03-14 16:35 +--- +## Goal + +Create general purpose camera software. Must be able to: + +- Show four cameras at once +- Change the streaming image quality +- Mute and unmute a single camera +- Bring one camera to the foreground +- Work on macOS and iPad +## Tasks + +- [x] Fix bug with the audio stopping and not being able to restart ➕ 2026-03-14 ✅ 2026-03-23 +- [x] Change the code so that we can change the image quality ➕ 2026-03-14 ✅ 2026-04-13 +- [x] Add versioning to the project ➕ 2026-03-14 ✅ 2026-04-13 +- [x] Create a `.dmg` ➕ 2026-03-14 ✅ 2026-04-13 +- [ ] Revert to the other camera streaming library and ensure that it does not crash in release mode ➕ 2026-04-13 +- [ ] Create a signed and notarized `.pkg` ➕ 2026-04-13 +## References + diff --git a/Projects/Software/Escape Gallery Control Software.md b/Projects/Software/Escape Gallery Control Software.md new file mode 100644 index 0000000..1355c52 --- /dev/null +++ b/Projects/Software/Escape Gallery Control Software.md @@ -0,0 +1,341 @@ +--- +active: true +tags: + - 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 + +- [x] Add horse nicker as a sound effect ➕ 2026-05-11 ✅ 2026-05-11 +- [x] 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 +- [x] 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 +- [x] Display the version number in the DMG title (use `version.json5`) ➕ 2026-04-21 ✅ 2026-05-14 +- [x] Collect and display the prop controller version numbers and display in the user interface ➕ 2026-05-11 ✅ 2026-05-14 +- [x] Change the drum sequence and the number of lights that illuminate ➕ 2026-05-15 ✅ 2026-05-20 +- [x] Add the lock combinations to the user interface ➕ 2026-04-23 ✅ 2026-05-20 +- [x] 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 + +- [x] 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 +- [x] Ensure prop controllers send a ping when they start ➕ 2026-04-22 ✅ 2026-05-09 +- [x] Add `.pkg` generation to the `odin_ui/Justfile` with version number in file name ➕ 2026-03-20 ✅ 2026-05-09 +- [x] Rename `sys_ping_interval_secs` in the server to be `initial_sys_poll_time_secs` ➕ 2026-04-21 ✅ 2026-05-09 +- [x] Keep track of all next contact Instant ➕ 2026-04-21 ✅ 2026-05-10 +- [x] Switch iOS build of Odin to Escape Gallery profile ➕ 2026-04-16 ✅ 2026-05-10 +- [x] Add support for pre-defined messages for Memir in the user interface ➕ 2026-03-05 ✅ 2026-05-06 +- [x] Create a separate stopwatch task with it's own commands; start, stop, reset ➕ 2026-02-06 ✅ 2026-02-11 +- [x] Incorporate new stopwatch into auto pilot and UI ➕ 2026-02-09 ✅ 2026-03-17 +- [x] Fix timer to be visible everywhere ➕ 2026-02-07 ✅ 2026-03-17 +- [x] Add faster feedback when press speak button ➕ 2026-02-07 ✅ 2026-03-17 +- [x] Move Memir up in the UI ➕ 2026-02-07 ✅ 2026-04-16 +- [x] Update the [[Escape Gallery Control Software]] with Geno structures ➕ 2026-03-23 ✅ 2026-04-16 +- [x] Swap in Geno for all messages and use MessagePack in Dart ➕ 2026-03-03 ✅ 2026-04-16 +- [x] Test out using MessagePack in Dart with Geno and Rust ➕ 2026-03-03 ✅ 2026-04-16 +- [x] Add `release` to the `Justfile` to build macOS package and iOS app ➕ 2026-04-16 ✅ 2026-04-21 +- [x] Fix running the app in release mode on MacOS ➕ 2026-03-08 ✅ 2026-04-21 +- [x] 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 +- [x] Sync up all the game command message field with corresponding state message fields ➕ 2026-04-22 ✅ 2026-04-23 +- [x] Finish the `odin_game_test` service that just responds to commands by changing state ➕ 2026-04-21 ✅ 2026-04-23 +- [x] Add a script to start the NATS service and the test game controller ➕ 2026-04-23 ✅ 2026-04-23 +- [x] Move all `getFullState` calls into the services after connection ➕ 2026-04-23 ✅ 2026-04-26 +- [x] All UI latch toggles are broken ➕ 2026-04-23 ✅ 2026-04-26 +- [x] Change UI to toggle buttons to solve/unsolve puzzles ➕ 2026-04-23 ✅ 2026-04-26 +- [x] Fix the bug with leaving the bellows in the fishes mouth ➕ 2026-03-05 ✅ 2026-04-26 +- [x] Add the two iOS devices to the provisioning profile for Escape Gallery ➕ 2026-04-16 ✅ 2026-04-27 +- [x] Create a tool to generate the `update` from prop state to prop state ➕ 2026-04-22 ✅ 2026-05-01 +- [x] Fix iOS app to reconnect to the NATS service after resume ➕ 2026-04-22 ✅ 2026-05-04 +- [x] Add `ClueServer` to `odin-ctrl` ➕ 2026-02-04 ✅ 2026-02-04 +- [x] Move Piper TTS code over to `odin-av2` and cut volume ➕ 2026-02-04 ✅ 2026-02-04 +- [x] Add Memir text to speech UI ➕ 2026-01-16 ✅ 2026-02-04 +- [x] Debug Memir end-to-end ➕ 2026-02-04 ✅ 2026-02-06 +- [x] Ensure time with seconds shows when in finished state ➕ 2026-01-28 ✅ 2026-02-06 +- [x] Increase power supply timer for `odin-drum` and screw down the lid ➕ 2026-01-26 ✅ 2026-02-06 +- [x] Remove and drill out the holes for the knocker ➕ 2026-02-04 ✅ 2026-02-06 +- [x] Ensure `odin-ctrl` restarts always (fix `.conf` file) ➕ 2026-01-28 ✅ 2026-02-06 +- [x] Write test program for `odin-av2` to test TTS ➕ 2026-01-14 ✅ 2026-02-04 +- [x] Fix `odin-av2` build problem ➕ 2026-01-18 ✅ 2026-01-25 +- [x] Design and print caps for the knocker switches ➕ 2026-01-18 ✅ 2026-01-25 +- [x] Fix the electronics in the horses head ➕ 2026-01-11 ✅ 2026-01-25 +- [x] Add continuous re-start logic to all servers ➕ 2026-01-22 ✅ 2026-01-25 +- [x] Fix the knocker detection algorithm ➕ 2026-01-14 ✅ 2026-01-26 +- [x] Merge new knocker code into `odin-drum` ➕ 2026-01-26 ✅ 2026-01-27 +- [x] Add the code to gradually turn off the sconces ➕ 2026-01-19 ✅ 2026-01-28 +- [x] Wolf snarl starts to quickly after last animal head solved ➕ 2026-01-19 ✅ 2026-01-19 +- [x] End sequence starts to quickly after hammer or dragon is solved ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Tree of life lights turn off when the helm lights are turned on or off ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Turn on the other light when going through the fireplace ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Fireplace latch extra toggles need to be faster ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Reduce sound effect volume ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Switch eyes on the berserker heads in the prop controller ➕ 2026-01-18 ✅ 2026-01-19 +- [x] Change all prop controller `main.rs` and `config_file.rs` to require a config file ➕ 2026-01-18 ✅ 2026-01-19 +- [x] Reduce number of times required to turn crank and make configurable ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Put `degrees_to_duty_cycle` in `odin_prop_util` ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Dragons triggered with only one half of the spear ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Turn off barrel puzzle after 5 minutes ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Make Memir's eye pulse when on ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Make sconces flicker ➕ 2025-08-13 ✅ 2026-01-19 +- [x] Make chandelier flicker ➕ 2025-12-23 ✅ 2026-01-19 +- [x] Make fireplace flicker ➕ 2025-12-23 ✅ 2026-01-19 +- [x] `Off` condition must turn off cupboards lights, dragon eyes, helm eyes, hammer box light ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Check the `Running` room condition sets all the game states ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Implement the `Ready` room condition ➕ 2026-01-17 ✅ 2026-01-19 +- [x] Implement the `Resetting` room condition ➕ 2026-01-17 ✅ 2026-01-19 +- [x] Implement the `Finished` room condition ➕ 2026-01-17 ✅ 2026-01-19 +- [x] Turn on warriors eyes when helm puzzle solved ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Check tree lights turn on when the fireplace opens ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Add sound effects into the auto-pilot; eagle, horse, bear, fish, hammer, dragons, ➕ 2026-01-18 ✅ 2026-01-19 +- [x] Grand finale lightning sequence with flashing lights ➕ 2026-01-18 ✅ 2026-01-19 +- [x] Add a timer to the auto-pilot tab ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Hook up auto-pilot logic to update the time and sconces based on the time elapsed ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Have fire place latch cycle 3 times in the prop controller ➕ 2026-01-19 ✅ 2026-01-19 +- [x] Replace the barrel audio ➕ 2026-01-13 ✅ 2026-01-14 +- [x] Test out the microphones and make sure we can hear everything ➕ 2026-01-13 ✅ 2026-01-14 +- [x] Refactor to remove the timer in the controller in prep for moving timing to the auto-pilot ➕ 2026-01-14 ✅ 2026-01-14 +- [x] Add margin to the LabelIconButtons ➕ 2026-01-16 ✅ 2026-01-16 +- [x] Make a LabelButton widget with a fix width ➕ 2026-01-14 ✅ 2026-01-16 +- [x] Switch to using `publish_json` and `publish_rmp` in `odin_ctrl` ➕ 2026-01-15 ✅ 2026-01-16 +- [x] Get [piper-rs](https://github.com/thewh1teagle/piper-rs) building in container ➕ 2026-01-14 ✅ 2026-01-16 +- [x] Go through all `cmd_loop`'s and move `Some(cmd) =>` logic inside the `match` ➕ 2026-01-04 ✅ 2026-01-16 +- [x] Rename dragon to mantle puzzle ➕ 2026-01-11 \7 u ✅ 2026-01-16 +- [x] Create new helm electronics for testing with simulator ➕ 2026-01-10 ✅ 2026-01-17 +- [x] Repair electronics for the helms in `odin-tree` ➕ 2026-01-11 ✅ 2026-01-17 +- [x] Implement end game and room off commands for auto-pilot ➕ 2026-01-16 ✅ 2026-01-17 +- [x] Remove "Auto Pilot" toggle and add buttons for "Room Ready", "Start Game", "End Game", and "Room Off" ➕ 2026-01-14 ✅ 2026-01-17 +- [x] Process, add to `assets` and upload all sound effects to `odin-av1` ➕ 2026-01-15 ✅ 2026-01-17 +- [x] Write test program to set background audio volume ➕ 2026-01-15 ✅ 2026-01-18 +- [x] Play sound effects and duck background audio ➕ 2026-01-11 ✅ 2026-01-18 +- [x] Change color of buttons when value like radio button (add a flag to `LabelIconButton`) ➕ 2026-01-11 ✅ 2026-01-18 +- [x] Hook up Ui for sound effects ➕ 2026-01-15 ✅ 2026-01-18 +- [x] Implement the `Off` room condition ➕ 2026-01-17 ✅ 2026-01-18 +- [x] Install new software on iPad ➕ 2026-01-18 ✅ 2026-01-19 +- [x] Commit all `odin_test` to Gitea ➕ 2026-01-11 ✅ 2026-01-11 +- [x] Create test program for the drum sequence ➕ 2026-01-11 ✅ 2026-01-11 +- [x] Finish the coding for the drum sequence ➕ 2026-01-04 ✅ 2026-01-11 +- [x] Fix sequence and write the tree on/off prop code ➕ 2025-12-29 ✅ 2026-01-11 +- [x] Install new piezo drum vibration sensors ➕ 2025-08-17 ✅ 2026-01-11 +- [x] Write code for `odin-drum` to detect drumming pattern ➕ 2025-12-23 ✅ 2026-01-11 +- [x] Hook up knocker to auto-pilot ➕ 2025-12-26 ✅ 2026-01-11 +- [x] Hook up drums to auto-pilot ➕ 2025-12-26 ✅ 2026-01-11 +- [x] Hook up hammer hand to auto-pilot ➕ 2026-01-11 ✅ 2026-01-11 +- [x] Hook up dragons to auto-pilot ➕ 2026-01-11 ✅ 2026-01-11 +- [x] Add the timer to the auto-pilot ➕ 2025-12-23 ✅ 2026-01-13 +- [x] Add UI to start background music ➕ 2025-12-23 ✅ 2026-01-11 +- [x] Add UI for drums ➕ 2025-12-23 ✅ 2026-01-11 +- [x] Design the case for the combined power and buck board ➕ 2025-12-23 ✅ 2026-01-11 +- [x] Print cases and assemble and program the first one taking notes ➕ 2025-12-23 ✅ 2026-01-11 +- [x] Add code to read the Berserker heads in `odin_tree` ➕ 2025-11-06 ✅ 2026-01-11 +- [x] Add UI for Berserker heads ➕ 2025-11-12 ✅ 2026-01-11 +- [x] Make the barrel puzzle audio play forever ➕ 2026-01-04 ✅ 2026-01-10 +- [x] Add a switch in UI to turn on tree lights ➕ 2025-11-12 ✅ 2026-01-10 +- [x] Write the helms prop code ➕ 2025-12-29 ✅ 2026-01-10 +- [x] Finish the dragon prop code (reset is not working) ➕ 2026-01-03 ✅ 2026-01-10 +- [x] Finish the coding for the detection of the knocker sequence ➕ 2026-01-04 ✅ 2026-01-10 +- [x] Add `av1` and `av2` into System tab ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Create prop control software for `odin-av1` ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Create prop control software for `odin-av2` ➕ 2025-12-13 ✅ 2025-12-13 +- [x] 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 +- [x] 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 +- [x] Horses right eye no longer registers light/dark - need to dismantle and debug ➕ 2025-11-08 ✅ 2025-11-13 +- [x] Divide up the controllers equally between the power supplies and see if that fixes the power on problem ➕ 2025-11-08 ✅ 2025-11-13 +- [x] Add horse head eye sensor code code in `odin_middle` ➕ 2025-11-04 ✅ 2025-11-06 +- [x] Add short door latch opener code to `odin_left` ➕ 2025-11-05 ✅ 2025-11-06 +- [x] Add long door latch opener code to `odin_left` ➕ 2025-11-05 ✅ 2025-11-06 +- [x] Create `deploy-all` script ➕ 2025-11-05 ✅ 2025-11-06 +- [x] Add reset UI ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Get fish RFID reader working with reset on `odin_left` ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Get bear RFID reader working with reset `odin_left` ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Get bird RFID reader working `odin_middle` ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Get horse eye light sensors working `odin_middle` ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Change `PROP_SYSTEM_STATE_SUBJECT` to `prop.system.state` and re-deploy all prop controllers ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Fix the broken sensors on the barrel puzzle ➕ 2025-11-04 ✅ 2025-11-08 +- [x] Add UI for the knocker puzzle; knocker, long door ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Get knocker door opener working ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Add UI for drum puzzle; tree, sensors, short door ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Get the drum door opener working ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Add UI for the helm puzzle; helmets, hammer chest ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Get helm puzzle chest opening ➕ 2025-11-08 ✅ 2025-11-08 +- [x] Add UI for `berserker_puzzle.` ➕ 2025-11-06 ✅ 2025-11-09 +- [x] Rename `odin_prop` to `odin_prop_msg` ➕ 2025-11-08 ✅ 2025-11-09 +- [x] Create a new `odin_prop_util` for `helpers.rs` contents and remove all helpers.rs files ➕ 2025-11-08 ✅ 2025-11-09 +- [x] Tidy up dragon puzzle UI ➕ 2025-11-11 ✅ 2025-11-11 +- [x] Get spear hooked up to UI ➕ 2025-11-11 ✅ 2025-11-11 +- [x] 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 +- [x] Generate a Dart file for `SvgPicture` in a service and register ➕ 2025-11-05 ✅ 2025-11-12 +- [x] Get hammer UI working; hand ➕ 2025-11-08 ✅ 2025-11-12 +- [x] Get table puzzle UI coded ➕ 2025-10-18 ✅ 2025-10-31 +- [x] Get ship puzzle UI coded ➕ 2025-10-26 ✅ 2025-10-31 +- [x] Change timer UI to be a slider ➕ 2025-10-25 ✅ 2025-10-31 +- [x] Add a [Slider](https://api.flutter.dev/flutter/material/Slider-class.html) with discrete values and allow setting ➕ 2025-10-26 ✅ 2025-10-31 +- [x] Get fireplace puzzle UI coded ➕ 2025-10-26 ✅ 2025-10-31 +- [x] Get barrel puzzle UI coded ➕ 2025-10-31 ✅ 2025-10-31 +- [x] Configure laptop so I can build and install control software on iPad ➕ 2025-10-31 ✅ 2025-11-01 +- [x] Figure out how to set macOS menu and window to **Odin** ➕ 2025-10-31 ✅ 2025-11-01 +- [x] Hook lighting up end-to-end ➕ 2025-10-31 ✅ 2025-11-01 +- [x] Create a `label_switch` widget with a ✅ 2025-11-01 +- [x] Use `label_switch` everywhere for consistent sizing of label plus switch ➕ 2025-11-01 ✅ 2025-11-01 +- [x] Debug the axe puzzle ➕ 2025-11-01 ✅ 2025-11-01 +- [x] Create a `PositionedAxe` widget with a `bool?` for the state ➕ 2025-11-01 ✅ 2025-11-01 +- [x] Refactor `odin-ctrl` to pass discrete `bool?` back to UI for axes from controller ➕ 2025-11-01 ✅ 2025-11-02 +- [x] Split lighting into throne and feast rooms ➕ 2025-10-31 ✅ 2025-11-02 +- [x] Refactor controller to use `include!` to avoid extra module ➕ 2025-11-02 ✅ 2025-11-02 +- [x] Hook table puzzle up end-to-end ➕ 2025-11-01 ✅ 2025-11-02 +- [x] Hook ship puzzle up end-to-end ➕ 2025-10-31 ✅ 2025-11-02 +- [x] Make `NavigationRail` scrollable ➕ 2025-11-04 ✅ 2025-11-04 +- [x] Hook up the barrel puzzle end-to-end ➕ 2025-11-02 ✅ 2025-11-04 +- [x] Put the `Stack` elements in a container that is sized from the biggest SVG ➕ 2025-11-04 ✅ 2025-11-04 +- [x] Remove the numbers from the `axeFrame` ➕ 2025-11-04 ✅ 2025-11-04 +- [x] Fix the system status code in the controller. ➕ 2025-11-04 ✅ 2025-11-04 +- [x] Add fireplace latch pin code ➕ 2025-11-04 ✅ 2025-11-04 +- [x] Get bird RFID reader working ➕ 2025-11-04 ✅ 2025-11-05 +- [x] Add chest latch opener code ➕ 2025-11-05 ✅ 2025-11-05 +- [x] Break the messages to/from the prop controllers into a separate library ➕ 2025-09-28 ✅ 2025-09-28 +- [x] Switch to using `MessagePacker` cr for message transmission ➕ 2025-09-28 ✅ 2025-09-28 +- [x] Just add the message format header ➕ 2025-09-28 ✅ 2025-09-28 +- [x] Test the new `odin_axe` code ➕ 2025-09-28 ✅ 2025-09-28 +- [x] Merge changes back into `rust_prop_quickstart` ➕ 2025-09-28 ✅ 2025-09-28 +- [x] Add `odin_prop` to `odin_ctrl` ➕ 2025-09-28 ✅ 2025-10-03 +- [x] Create `AxePuzzle` object and hold onto the handle in the `Server` object ➕ 2025-09-28 ✅ 2025-10-03 +- [x] Create a new new Flutter app for control ➕ 2025-04-21 ✅ 2025-10-03 +- [x] Add `dummy` state into `odin_prop` to support `rust_prop_quickstart` ➕ 2025-09-28 ✅ 2025-10-03 +- [x] Add command to force full state to be sent to controller ➕ 2025-10-03 ✅ 2025-10-03 +- [x] Send full state command when controller starts ➕ 2025-10-03 ✅ 2025-10-03 +- [x] Request full state when the UI starts up or when the puzzle button is clicked on left ➕ 2025-10-03 ✅ 2025-10-04 +- [x] Whiteboard the control software design ➕ 2024-11-26 ✅ 2025-04-25 +- [x] Finish Sketch from a plan view of the room ➕ 2025-02-16 ✅ 2025-08-13 +- [x] Configure static IP for `eg-1` on `rm-1.escapegallery.net` ✅ 2025-09-08 +- [x] Configure DHCP & DNS via `dnsmasq` on `eg-1` ➕ 2025-08-06 ✅ 2025-09-08 +- [x] Configure wired connection for `odin-axe` ➕ 2025-08-13 ✅ 2025-09-08 +- [x] Configure `/etc/hosts` on `eg-1` to add `eg-1.rm-1.escapegallery.net` ➕ 2025-09-08 ✅ 2025-09-09 +- [x] Ensure that we can `ssh` over the `10.10.0.0/24` network ➕ 2025-09-08 ✅ 2025-09-09 +- [x] Configure `nftables` for the `rm-1` network to NAT packets ➕ 2025-09-08 ✅ 2025-09-09 +- [x] Temporarily take down `odin-axe` WiFi and check that updates work ➕ 2025-09-09 ✅ 2025-09-09 +- [x] Set timeouts for DHCP on `odin-axe` and reboot ➕ 2025-09-09 ✅ 2025-09-09 +- [x] Disable the WiFi permanently on RPi for `odin-axe` and test reboot ➕ 2025-09-08 ✅ 2025-09-09 +- [x] Add `env_logger` to `odin_axe` and remove existing logger ➕ 2025-09-11 ✅ 2025-09-11 +- [x] Add a command line to indicated the name of the NATS server ➕ 2025-09-11 ✅ 2025-09-11 +- [x] Add Ctrl+C handling ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Add a `select` loop that listens on a `flume` channel for messages from the monitor thread ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Add the thread to monitor the state of the readers ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Add `flume` and send a message when axe state changes to main loop ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Remove the checks for correctness just record the UID from the RFID chips ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Add `serde` and `serde_json` to the project ➕ 2025-09-11 ✅ 2025-09-12 +- [x] Kill the GPIO thread when Ctrl+C is hit ➕ 2025-09-12 ✅ 2025-09-12 +- [x] Add a `HashMap` to track prop state ➕ 2025-09-11 ✅ 2025-09-12 +- [x] If the value has change, update the `HashMap` ➕ 2025-09-12 ✅ 2025-09-12 +- [x] Publish nats message when state changes ➕ 2025-09-12 ✅ 2025-09-12 +- [x] Run setup scripts on `odin-throne` and `odin-feast` ➕ 2025-09-13 ✅ 2025-09-13 +- [x] Reverse `odin-throne` and `odin-feast` host names ➕ 2025-09-13 ✅ 2025-09-13 +- [x] Add `odin` account to `/etc/nats-server.conf` on `eg-1` ➕ 2025-09-13 ✅ 2025-09-13 +- [x] Install and configure [`lld` linker and test](https://users.rust-lang.org/t/linking-taking-an-inordinately-long-time/39253/4) ➕ 2025-09-13 ✅ 2025-09-14 +- [x] Fix `odin-drum` ethernet connection ➕ 2025-09-15 ✅ 2025-09-19 +- [x] Set up quick-start to cross compile on mac and then copy to specific machine using `Justfile` ➕ 2025-09-13 ✅ 2025-09-19 +- [x] Put new SD card in `odin-ship` ➕ 2025-09-15 ✅ 2025-09-25 +- [x] Configure SD card in `odin-ship` ➕ 2025-09-25 ✅ 2025-09-25 +- [x] Take `odin-ship` off of WiFi ➕ 2025-09-25 ✅ 2025-09-26 +- [x] Create a service file template for prop controllers ➕ 2025-09-13 ✅ 2025-09-26 +- [x] Make `cmd` messages set the `prop` state and publish ➕ 2025-09-13 ✅ 2025-09-26 +- [x] Update the `HashMap` when the state of the axes changes ➕ 2025-09-11 ✅ 2025-09-26 +- [x] Create script to turrn off WiFi for a prop controller ➕ 2025-09-08 ✅ 2025-09-26 +- [x] Refactor code to put stuff into `self` methods ➕ 2025-09-26 ✅ 2025-09-26 +- [x] Ensure prop servers output version number when starting ➕ 2025-09-25 ✅ 2025-09-26 +- [x] Increment patch number when doing deployments ➕ 2025-09-25 ✅ 2025-09-26 +- [x] Write out name of controller from the `clap` information as first log message ➕ 2025-09-13 ✅ 2025-09-26 +- [x] Add code to reset the latch after configurable amount of time (1 sec default) ➕ 2025-09-26 ✅ 2025-09-26 +- [x] Debug why the `single_instance` code is not working! ➕ 2025-09-25 ✅ 2025-09-26 +- [x] Merge common changes into `rust_prop_quickstart` ➕ 2025-09-26 ✅ 2025-09-26 +- [x] Create the `odin-ctrl` project ➕ 2025-09-14 ✅ 2025-09-27 +- [x] Install `odin-ctrl` on `eg-1` and setup to build it there ➕ 2025-09-14 ✅ 2025-09-27 +- [x] `odin-axe` ✅ 2025-10-05 +- [x] Fix `dnsmasq` issue on `eg-1` ➕ 2025-10-05 ✅ 2025-10-05 +- [x] Install [Caddy]() on `eg-1` ➕ 2025-10-05 ✅ 2025-10-05 +- [x] Create feast room lighting page ➕ 2025-10-05 ✅ 2025-10-23 +- [x] Take `odin-av` off of WiFi ➕ 2025-09-15 ✅ 2025-10-23 +- [x] Test that `rust-analyzer` in VS Code works with just the `settings.json` value set ➕ 2025-10-23 ✅ 2025-10-23 +- [x] Remove all `config.toml` files ➕ 2025-10-23 ✅ 2025-10-23 +- [x] Set `RUSTFLAGS` environment variable for builds in the Justfile and test ➕ 2025-10-23 ✅ 2025-10-23 +- [x] Fix prop control install scripts ➕ 2025-10-23 ✅ 2025-10-23 +- [x] Move `odin-ctrl` install and deploy scripts to `Justfile` ➕ 2025-10-23 ✅ 2025-10-23 +- [x] Ensure all prop controllers send actual state after initialization ➕ 2025-10-19 ✅ 2025-10-23 +- [x] Add icons for macOS and web ➕ 2025-10-19 ✅ 2025-10-24 +- [x] Make sure each dashboard tab requests state when it loads ➕ 2025-10-23 ✅ 2025-10-24 +- [x] Get `odin-axe` controller ping working end-to-end ➕ 2025-10-18 ✅ 2025-10-25 +- [x] Send the system state on a timer from `odin-ctrl` instead of as it comes in ➕ 2025-10-25 ✅ 2025-10-25 +- [x] Make prop controller status update time a config setting ➕ 2025-10-25 ✅ 2025-10-25 +- [x] Add prop controller status for all other prop controllers ➕ 2025-10-24 ✅ 2025-10-26 +- [x] Ensure `odin-ctrl` requests full state from all prop controllers 3 seconds after it starts ➕ 2025-10-18 ✅ 2025-10-26 +- [x] Label the unused switch that now lights the table ➕ 2025-10-26 ✅ 2025-10-26 +- [x] Put a `GridView` in the lighting tab ➕ 2025-10-26 ✅ 2025-10-29 +- [x] Remove the arrays from the Lighting controller messages and use named fields ➕ 2025-10-29 ✅ 2025-10-30 +- [x] Remove the chandelier solenoid out of the lighting tab ➕ 2025-10-20 ✅ 2025-10-30 +- [x] Add unique nav bar icons for all the puzzles ➕ 2025-11-02 ✅ 2025-11-13 +- [x] Create `AsyncAwaiter` widget centered [`flutter_spinkit`](https://pub.dev/packages/flutter_spinkit) spinner and message ➕ 2025-10-30 ✅ 2025-11-13 +- [x] Position the drums ➕ 2025-11-13 ✅ 2025-11-13 +- [x] Add code to drive tree lights in `odin_tree` ➕ 2025-11-06 ✅ 2025-11-13 +- [x] Move code into the `odin_prop_util` from `odin_prop_msg` ➕ 2025-12-09 ✅ 2025-12-09 +- [x] Fix the `Justfile` to label builds correctly ➕ 2025-12-09 ✅ 2025-12-09 +- [x] Configure scripting on `odin-ctrl` ➕ 2025-12-09 ✅ 2025-12-09 +- [x] Add code to receive commands from script and forward ➕ 2025-12-09 ✅ 2025-12-13 +- [x] Update prop and game controllers ➕ 2025-12-13 ✅ 2025-12-13 +- [x] Copy auto pilot code over from the simulator ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot UI in the app ➕ 2025-12-13 ✅ 2025-12-23 +- [x] Get auto pilot triggering the axe puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the table puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the ship puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the bird puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the horse puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the bear puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the fish puzzle ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Get auto pilot triggering the fireplace ➕ 2025-12-14 ✅ 2025-12-23 +- [x] Test EG room cameras ➕ 2025-07-06 ✅ 2025-12-23 +- [x] Test EG speakers with `audio-forwarder` ➕ 2025-09-15 ✅ 2025-12-23 +- [x] Test Memir speakers with `audio-forwarder` ➕ 2025-10-23 ✅ 2025-12-23 +- [x] Test EG microphone with `audio-forwarder` ➕ 2025-09-15 ✅ 2025-12-23 +- [x] Get crank count code working on `odin_right` ➕ 2025-11-05 ✅ 2025-12-23 +- [x] Add the crank count to the fireplace UI ➕ 2025-10-31 ✅ 2025-12-23 +- [x] Add `room_on` state to the `game.controller.state` message and set when all prop controllers are alive ➕ 2025-10-20 ✅ 2025-12-23 +- [x] Update UI based on `room_on` state ➕ 2025-10-20 ✅ 2025-12-23 +- [x] Re-install the knocker in the wall ➕ 2025-12-26 ✅ 2025-12-26 +## Notes + +Debug msgpack encoded messages on NATS using: + +```sh +nats sub --translate 'mpk --to-json' prop..state +``` + +You can also create a debug build of the the prop controller that uses [`to_vec_named`](https://docs.rs/rmp-serde/1.3.0/rmp_serde/encode/fn.to_vec_named.html) to add field names to the structure. +## References + +![[odin_left_middle_right.png.jpeg]] +- [NATS](https://github.com/nats-io/nats.ws) +- [[Prop and Game Controller Raspberry Pi Configuration]] +- [Use Rhai for Scripting in Rust](https://crates.io/crates/rhai) +- [`msgpack-cli`](https://crates.io/crates/msgpack-cli) +- [Flutter Drawer](https://docs.flutter.dev/cookbook/design/drawer) +- [flutter_svg](https://pub.dev/packages/flutter_svg) + + +## 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. diff --git a/Projects/Software/Escape Gallery Nextcloud.md b/Projects/Software/Escape Gallery Nextcloud.md new file mode 100644 index 0000000..c2c11ad --- /dev/null +++ b/Projects/Software/Escape Gallery Nextcloud.md @@ -0,0 +1,17 @@ +--- +created: 2024-12-13 +tags: + - project + - eg +active: false +--- +## Goal + +Create a [Nextcloud](https://nextcloud.com/) instance for Escape Gallery + +## To Do + +- [x] Create and configure a `proxy-2` machine ➕ 2024-06-02 ✅ 2026-05-20 +- [x] Install [Caddy](https://caddyserver.com/) on `proxy-2` ➕ 2024-06-02 ✅ 2026-05-20 +- [-] Install [Nextcloud](https://github.com/nextcloud/all-in-one) with Docker ➕ 2024-05-20 ❌ 2025-10-25 +- [-] Create a real VM machine to run Docker ➕ 2024-05-10 ❌ 2025-10-25 \ No newline at end of file diff --git a/Projects/Software/Escape Room Escape Buddy.md b/Projects/Software/Escape Room Escape Buddy.md new file mode 100644 index 0000000..e46484f --- /dev/null +++ b/Projects/Software/Escape Room Escape Buddy.md @@ -0,0 +1,40 @@ +## Goal + +Escape buddy is a web site that let’s you find “buddies” to do Escape rooms with. + +## Notes + +- Register as a user + - Cities that you can play in + - Preferred size of group + - Male/female/mixed + - List of Escape Rooms completed + - Implies a list of Escape rooms? + - Escape rooms interested in + - Ratings from other players + - Are these public & hidden? + - Maybe just written feedback? +- Can create an escape team + - Can request to join a team + - Could you vet who joins? + - Team name + - Escape rooms interested in, or specific one? + - Can create an event + - Suggest dates & times for the game + - Sign up for the game + - Split the cost among team members + - Post a review of the escape room + - Post pictures + +## Requirements + +- Authentication +- Database +- Image/file storage +- Web site +- App + +## Examples + +[Spark Golf](https://www.spark.golf/) + diff --git a/Projects/Time Clock.md b/Projects/Time Clock.md new file mode 100644 index 0000000..b3bd5f7 --- /dev/null +++ b/Projects/Time Clock.md @@ -0,0 +1,44 @@ +--- +active: true +tags: project +created: 2026-06-08 19:27 +--- +## Goal + +Build a time clock with: + +- Hangs on the wall +- LCD backlit clock +- Fingerprint reader +- Keypad for PIN and UI +- Simple clock-in/clock-out interface +- Way to generate a help request +- System connects to a backend database that stores the timecard data +- PoE for power +- Built in speaker for sound effects +## Tasks + +- [x] Order parts ➕ 2026-06-08 ✅ 2026-07-11 +- [x] Print two halves of the case (rev 1) ➕ 2026-07-09 ✅ 2026-07-09 +- [x] Adjust case halves ➕ 2026-07-09 ✅ 2026-07-09 +- [x] Print rev 2 of cases ➕ 2026-07-09 ✅ 2026-07-09 +- [x] Install inserts into the case halves ➕ 2026-07-09 ✅ 2026-07-10 + +## Notes + +The FPM10A (or DY50) is a highly popular optical fingerprint sensor that communicates over a TTL serial interface. It features an internal DSP chip that handles rendering, calculation, and feature-finding, making it exceptionally easy to use with an Arduino for smart locks and access control projects. +### Wiring Connections + +The FPM10A usually comes with a 6-pin connector, but you only need to use the 4 pins designated for power and serial communication. + +- **Red Wire (VCC)**: Connect to Arduino **5V** +- **Black/Green Wire (GND)**: Connect to Arduino **GND** +- **Green Wire (TXD)**: Connect to Arduino Digital Pin **2** +- **White/Yellow Wire (RXD)**: Connect to Arduino Digital Pin **3** +## References + +- [FPM10A Fingerprint Sensor](https://doc.grablo.co/en/docs/user-manuals/i-o-device/as608-fpm10a-fingerprint-sensor/#3.) +- [`rppal uart`](https://docs.rs/rppal/latest/rppal/uart/index.html) +- [`Grow-r502-a_fingerprint_sensor`](https://crates.io/crates/Grow-r502-a_fingerprint_sensor) +- [`bell ding 1.wav`](freesound.org/people/5ro4/sounds/611113/) + diff --git a/Projects/Viking Quest Walking Puzzle.md b/Projects/Viking Quest Walking Puzzle.md new file mode 100644 index 0000000..8e9db7e --- /dev/null +++ b/Projects/Viking Quest Walking Puzzle.md @@ -0,0 +1,15 @@ +--- +active: false +tags: project +created: 2025-05-13 08:56 +--- +## Goal + +Create a walking quest puzzle for Viking Fest 2025 +## Tasks + +- [ ] Create the Viking Quest puzzle ➕ 2025-05-13 +- [ ] Test the Viking Quest puzzle with Toby & Cindi ➕ 2025-05-13 +- [ ] Send the Viking Quest puzzle to Eva ➕ 2025-05-13 +## References +