Features: // Board Naming Schema: eg. PV25K07BC01R01 PV 25 K 07 BC 01 R 01 PV [Y] [M] [D] [BT] [RV] R [BC] // SERBIA_OLD: PV25K07BC01R01 // SERBIA_NEW: PV26A28BC01R01 // XRISTIANIKH_ELPIS: PV26B02BP01R01 PV25L22BP01R01 Y: (Year) 2 Digit Year. eg 25 for 2025 M: (Month) 1 Letter as Coded Month. eg B for February D: (Day) 2 Digit Date. eg 17 for 17th of the Month BT: (Board Type) 2 letter/digit board Type (custom) eg BC for BellCore RV: (Revision) 2 letter/digit board revision code R: Now, just an R for "Revision" but can change later BC: (Batch Code) 2 digit SerialNumber starting from 01 // mqtt topics: vesper//data // Data sent from the controller vesper//control // Commands sent to the controller vesper//kiosk/event // Kiosk Mode Events vesper//kiosk/info // Kiosk Mode General Info - WiFi Manager (captive portal with hotspot) - MQTT Support (Subscribing and Publishing) - WebSocket Support (Sending and Receiving) - JSON Format Messaging (both MQTT and WS) - SD Card Handling and File Ops - Stand-alone Player/BellEngine Classes, with functions to Play/Pause/Stop etc - NoteAssignments - Effectively mapping Notes to Bells - Independent SubSystems for all Core Functions (Networking/Comms/Scheduling/Logging/etc) - Custom Relay Output Maps and Timings (saved on SD) - Timekeeper with RTC/Clock/Alerts/Scheduling features - OTA Update Functionality with Versioning/Rollbacks/Checksum/Firmware Validation/NTP Sync - Global logger with Mode Selection (None, Error, Warning, Info, Debug, Verbose) - UDP Listener for Auto Device Discovery - Datalogging and Statistics: - Counter for each bell (counts total times the bell ringed) - Counter per bell, beats/minute for reliability and thermal protection. Warranty Void scenario. - Ability to change Log levels (in-app) ToDo Features: - (optional) Add Bluetooth support - (optional) Add WiFi Direct AP Support - (optional) Add PCB Temperature Sensor Support - (critical) Counters and Statistics: - Counter per playback, to figure out which melody is the most played. This can be implemented on the App itself. Doesn't need to be on the Device. - Create a "humanizer" mode that randomizes delays on playback to simulate human ringing. ToDo Fixes: - (small significance) Fix each Log's level Correctly + Fix Log Syntax where needed - (medium significance) BellGuard: Make the buttons functional. - Fix IP Settings not applying. More Specifically, Variables inside the Components take long to update. Either Ditch the components, or find another way. - On Very fast playback speeds and small programs that will run for less than a second or so, STOP isn't sent properly. Player keeps indicating "playing". - When a new user is created, set default PINs for both Quick Settings, and Settings.