When a tag with a cycle effect is removed, other pads were left
frozen in whatever color the cycle left them at. Now:
- Pads with active tags get their lighting theme re-applied
- Pads with no tags get turned off properly
- apply_tag_color() now uses reader.apply_effect() with speed param
- on_tag_remove() properly stops cycle effect before turning off pad
- Updated help text to document "cycle" effect option
- Works with tag_colors.json: set "effect": "cycle" for revolving lights
- New software_cycle() method creates rotating light chase across all pads
- Pattern: CENTER → LEFT → RIGHT → CENTER (customizable)
- Speed parameter controls rotation speed
- apply_effect() now supports "cycle" effect type
- Updates module to v1.5.0
- Changed apply_tag_color() to accept pad parameter
- LED effects now apply to tag.pad instead of Pad.ALL
- Tag removal only turns off the specific pad, not all pads
- Added active_pads tracking dictionary
- Added speed parameter support from tag_colors.json
- POST /api/video/play with JSON {"nfc_id": "card_id"}
- Matches web_interface.py api_play_video() endpoint
- Proper JSON Content-Type header
- Better error handling and response parsing
- Added skip video support
- Version bump to 1.3.0
- Sends card ID as plain text with Content-Type: text/plain
- Uses 10-digit zero-padded format (e.g., "0983187584")
- Tries /api/input first, falls back to /api/play
- Updated default URL to 100.94.163.117:8547
- Version bump to 1.2.0
- Mapping file now uses decimal card IDs: "983187584": "video.mp4"
- API calls include card_id as decimal integer
- Displays NFC Card ID in logs for easy mapping creation
- Version bump to 1.1.0
- TagInfo now includes nfc_card_id: the 10-digit decimal ID standard NFC readers display
- Calculated from bytes 3-6 of the 7-byte UID as big-endian uint32
- Example: UID 042B603A9A4080 -> nfc_card_id 983187584
- Updated standalone test to display nfc_card_id
- Version bump to 1.4.0
- Added speed field to default and tag entries
- Updated instructions with speed range info
- Added fast flash example tag
- Reference GUI tool in instructions
- Tag theme editor with color picker and RGB sliders
- Effect type selection: Solid, Flash, Pulse
- Speed control slider (0.2x fast to 3.0x slow) for Flash/Pulse effects
- Tag list with search/filter functionality
- Live portal connection and tag detection
- JSON config file import/export
- Video path assignments for Moonlight integration
- Real-time LED preview testing
- Default theme configuration
- Removed automatic green flash + cyan color on tag insert
- Callbacks now fully control LED behavior
- Added software_flash() for reliable cross-portal flashing
- Added software_pulse() for breathing effect
- Added apply_effect() unified interface
- Effects run in background threads (non-blocking)
- Tag removal stops any running effects on that pad
- Added legacy_key field to TagInfo for config lookup
- Add per-pad stop event system (_flash_stop_events dictionary)
- Add stop_flash(pad) method to cancel active flash animations
- flash_pad now checks stop events at multiple points in loop
- Tag removal handler calls stop_flash before setting pad to OFF
- Fixes issue where LED flash continued indefinitely after figure removed
- Tag detection turns ALL LEDs off immediately
- Server success shows CENTER blue blink (150ms)
- Theme effects (pulse/flash/solid) apply to ALL pads
- External tag_colors.json for customizable per-tag themes
- Debounce logic preserves theme effect even when skipping server