diff --git a/front/plugins/fritzbox/README.md b/front/plugins/fritzbox/README.md
new file mode 100755
index 00000000..7f13740d
--- /dev/null
+++ b/front/plugins/fritzbox/README.md
@@ -0,0 +1,212 @@
+## Overview
+
+The Fritz!Box plugin queries connected devices from a Fritz!Box router using the **TR-064** protocol (Technical Report 064), a standardized interface for managing DSL routers and home network devices. This plugin discovers all network-connected devices and reports their MAC addresses, IP addresses, hostnames, and connection types to NetAlertX.
+
+TR-064 is a UPnP-based protocol that provides programmatic access to Fritz!Box configuration and status information. Unlike web scraping, it offers a stable, documented API that works across Fritz!Box models.
+
+### Features
+
+- **Device Discovery**: Automatically detects all connected devices (WiFi 2.4GHz, WiFi 5GHz, Ethernet)
+- **Real-time Status**: Reports active connection status for each device
+- **Guest WiFi Monitoring**: Optional synthetic Access Point device to track guest network status
+- **Flexible Filtering**: Choose to report only active devices or include disconnected devices in Fritz!Box memory
+- **Secure Connection**: Supports both HTTP and HTTPS with configurable SSL verification
+
+> [!TIP]
+> TR-064 is typically enabled by default on Fritz!Box routers. If you encounter connection issues, check that it hasn't been disabled in your Fritz!Box settings under **Home Network > Network > Network Settings > Allow access for applications**.
+
+### Quick Setup Guide
+
+To set up the plugin correctly:
+
+1. **Enable TR-064 on Fritz!Box** (usually already enabled):
+ - Log in to your Fritz!Box web interface (typically `fritz.box` or `192.168.178.1`)
+ - Navigate to: **Home Network > Network > Network Settings**
+ - Ensure **"Allow access for applications"** is checked
+ - Note: Some models show this as **"Allow remote access"** - enable both HTTP and HTTPS
+
+2. **Configure Plugin in NetAlertX**:
+ - Head to **Settings** > **Fritz!Box Plugin**
+ - Set the required settings (see below)
+ - Choose run mode: **schedule** (recommended, runs every 5 minutes)
+
+#### Required Settings
+
+- **Fritz!Box Host** (`FRITZBOX_HOST`): Hostname or IP address of your Fritz!Box
+ - Default: `fritz.box`
+ - Alternative: `192.168.178.1` (or your Fritz!Box's IP)
+
+- **TR-064 Port** (`FRITZBOX_PORT`): Port for TR-064 protocol
+ - Default: `49443` (HTTPS). Use `49000` if HTTPS is disabled
+
+- **Username** (`FRITZBOX_USER`): Fritz!Box username
+ - Can be empty for some models when accessing from local network
+ - For newer models, use an admin username
+
+- **Password** (`FRITZBOX_PASS`): Fritz!Box password
+ - Required: Your Fritz!Box admin password
+
+#### Optional Settings
+
+- **Use HTTPS** (`FRITZBOX_USE_TLS`): Enable secure HTTPS connection (default: `true`)
+ - Recommended for security
+ - Requires port `49443` instead of `49000`
+
+- **Report Guest WiFi** (`FRITZBOX_REPORT_GUEST`): Create Access Point device for guest WiFi (default: `false`)
+ - When enabled, adds a synthetic "Guest WiFi Network" device to your device list
+ - Device appears only when guest WiFi is active
+ - Useful for monitoring guest network status
+
+- **Guest WiFi Service** (`FRITZBOX_GUEST_SERVICE`): Which WLANConfiguration service is the guest network (default: `3`)
+ - Fritz!Box typically uses `1` for 2.4GHz, `2` for 5GHz, `3` for guest WiFi
+ - Only relevant when **Report Guest WiFi** is enabled
+ - Change this if your Fritz!Box uses a non-standard configuration
+
+- **Active Devices Only** (`FRITZBOX_ACTIVE_ONLY`): Report only connected devices (default: `true`)
+ - When enabled, only currently connected devices appear
+ - When disabled, includes all devices stored in Fritz!Box memory (even if disconnected)
+
+### Usage
+
+1. Head to **Settings** > **Fritz!Box** to configure the plugin
+2. Set **When to run** to **schedule** (recommended) or **once** for manual testing
+3. The plugin will run every 5 minutes by default (configurable via **Schedule** setting)
+4. View discovered devices in the **Devices** page
+5. Check logs at `/tmp/log/plugins/script.FRITZBOX.log` for troubleshooting
+
+### Device Information Reported
+
+The plugin reports the following information for each device:
+
+| Field | Description | Mapped To |
+|-------|-------------|-----------|
+| **MAC Address** | Device hardware address (normalized format) | `devMac` |
+| **IP Address** | Current IPv4 address | `devLastIP` |
+| **Hostname** | Device name from Fritz!Box | `devName` |
+| **Connection Status** | "Active" or "Inactive" | `devVendor` (shown as vendor field) |
+| **Interface Type** | WiFi / LAN / Guest Network | `devType` |
+
+### Guest WiFi Feature
+
+When **Report Guest WiFi** is enabled and guest WiFi is active on your Fritz!Box:
+
+- A synthetic device named **"Guest WiFi Network"** appears in your device list
+- Device Type: **Access Point**
+- MAC Address: Locally-administered synthetic MAC derived from Fritz!Box MAC (e.g., `02:a1:b2:c3:d4:e5`)
+- Status: Only appears when guest WiFi is enabled
+
+This allows you to:
+- Monitor when guest WiFi is active
+- Set up notifications when guest network is enabled/disabled
+- Track guest network status alongside other network devices
+
+> [!NOTE]
+> The guest WiFi device is synthetic (not a real physical device). It's created by the plugin to represent the guest network state.
+
+### Troubleshooting
+
+#### Connection Refused / Timeout Errors
+
+**Symptoms**: Plugin logs show "Failed to connect to Fritz!Box" or timeout errors
+
+**Solutions**:
+1. Verify Fritz!Box is reachable:
+ ```bash
+ ping fritz.box
+ # or
+ ping 192.168.178.1
+ ```
+
+2. Check TR-064 is enabled:
+ - Fritz!Box web interface > **Home Network > Network > Network Settings**
+ - Enable **"Allow access for applications"**
+
+3. Verify correct port:
+ - HTTP: Port `49000`
+ - HTTPS: Port `49443`
+ - Match **Use HTTPS** setting with port
+
+4. Check firewall rules (if NetAlertX runs in Docker):
+ - Ensure container can reach Fritz!Box network
+ - Use host IP instead of `fritz.box` if DNS resolution fails
+
+#### Authentication Failed
+
+**Symptoms**: "Authentication error" or "Invalid credentials"
+
+**Solutions**:
+1. Verify password is correct
+2. Try leaving **Username** empty (some models allow this from local network)
+3. Create a dedicated user in Fritz!Box:
+ - **System > Fritz!Box Users > Add User**
+ - Grant network access permissions
+4. For newer Fritz!OS versions, ensure user has **"Access from home network"** permission
+
+#### No Devices Found
+
+**Symptoms**: Plugin runs successfully but reports 0 devices
+
+**Solutions**:
+1. Check **Active Devices Only** setting:
+ - If enabled, only connected devices appear
+ - Disable to see all devices in Fritz!Box memory
+2. Verify devices are actually connected to Fritz!Box
+3. Check Fritz!Box web interface > **Home Network > Mesh** to see devices
+4. Increase log level to `verbose` and check `/tmp/log/plugins/script.FRITZBOX.log`
+
+#### Guest WiFi Not Detected
+
+**Symptoms**: Guest WiFi enabled but no Access Point device appears
+
+**Solutions**:
+1. Ensure **Report Guest WiFi** is enabled
+2. Guest WiFi must be **active** (not just configured)
+3. Some Fritz!Box models don't expose guest network via TR-064
+4. Check plugin logs for "Guest WiFi active" message
+
+### Limitations
+
+- **Active-only filtering**: When `FRITZBOX_ACTIVE_ONLY` is enabled, the plugin only reports currently connected devices. Disconnected devices stored in Fritz!Box memory are ignored.
+
+- **Guest WiFi synthetic device**: The guest WiFi Access Point is a synthetic device created by the plugin. Its MAC address is derived from the Fritz!Box MAC and doesn't represent a physical device.
+
+- **Model differences**: Some Fritz!Box models may not expose all TR-064 services (e.g., guest WiFi detection). The plugin degrades gracefully if services are unavailable.
+
+- **IPv6 support**: Currently reports IPv4 addresses only. IPv6 support may be added in future versions.
+
+- **Device type detection**: Interface type (WiFi/LAN) is reported, but detailed device categorization (smartphone, laptop, etc.) is handled by NetAlertX's device type detection, not this plugin.
+
+### Technical Details
+
+**Protocol**: TR-064 (Technical Report 064) - UPnP-based device management protocol
+
+**Library**: [fritzconnection](https://github.com/kbr/fritzconnection) >= 1.15.1
+
+**Services Used**:
+- `FritzHosts`: Device discovery and information
+- `WLANConfiguration`: Guest WiFi status detection
+- `DeviceInfo`: Fritz!Box MAC address retrieval
+
+**Execution Schedule**: Default every 5 minutes (configurable via cron syntax)
+
+**Timeout**: 60 seconds (configurable via `RUN_TIMEOUT`)
+
+### Notes
+
+- **Performance**: TR-064 queries typically complete in under 2 seconds, even with many devices
+- **Security**: Passwords are stored in NetAlertX's configuration database and not logged
+- **Compatibility**: Tested with Fritz!Box models running Fritz!OS 7.x and 8.x
+- **Dependencies**: Requires `fritzconnection` Python library (automatically installed via requirements.txt)
+
+### Version
+
+- **Version**: 1.0.0
+- **Author**: NetAlertX Community
+- **Release Date**: January 2026
+- **License**: GPL-3.0
+
+### Support
+
+For issues, questions, or feature requests:
+- NetAlertX GitHub: [https://github.com/jokob-sk/NetAlertX](https://github.com/jokob-sk/NetAlertX)
+- Fritz!Box TR-064 Documentation: [https://avm.de/service/schnittstellen/](https://avm.de/service/schnittstellen/)
diff --git a/front/plugins/fritzbox/config.json b/front/plugins/fritzbox/config.json
new file mode 100755
index 00000000..0aabbe96
--- /dev/null
+++ b/front/plugins/fritzbox/config.json
@@ -0,0 +1,647 @@
+{
+ "code_name": "fritzbox",
+ "unique_prefix": "FRITZBOX",
+ "plugin_type": "device_scanner",
+ "execution_order" : "Layer_0",
+ "enabled": true,
+ "data_source": "script",
+ "mapped_to_table": "CurrentScan",
+ "data_filters": [
+ {
+ "compare_column": "objectPrimaryId",
+ "compare_operator": "==",
+ "compare_field_id": "txtMacFilter",
+ "compare_js_template": "'{value}'.toString()",
+ "compare_use_quotes": true
+ }
+ ],
+ "show_ui": true,
+ "localized": ["display_name", "description", "icon"],
+ "display_name": [
+ {
+ "language_code": "en_us",
+ "string": "FRITZ!Box"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Queries connected devices from a Fritz!Box router via TR-064 protocol"
+ }
+ ],
+ "icon": [
+ {
+ "language_code": "en_us",
+ "string": ""
+ }
+ ],
+ "params": [],
+ "settings": [
+ {
+ "function": "RUN",
+ "events": ["run"],
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "select", "elementOptions": [], "transformers": [] }
+ ]
+ },
+
+ "default_value": "disabled",
+ "options": [
+ "disabled",
+ "once",
+ "schedule"
+ ],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "When to run"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "When the plugin should run. Preferred option is schedule"
+ }
+ ]
+ },
+ {
+ "function": "RUN_SCHD",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ {
+ "elementType": "span",
+ "elementOptions": [
+ {
+ "cssClasses": "input-group-addon validityCheck"
+ },
+ {
+ "getStringKey": "Gen_ValidIcon"
+ }
+ ],
+ "transformers": []
+ },
+ {
+ "elementType": "input",
+ "elementOptions": [
+ {
+ "focusout": "validateRegex(this)"
+ },
+ {
+ "base64Regex": "Xig/OlwqfCg/OlswLTldfFsxLTVdWzAtOV18WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlswLTldfDFbMC05XXwyWzAtM118WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlsxLTldfFsxMl1bMC05XXwzWzAxXXxbMC05XSstWzAtOV0rfFwqL1swLTldKykpXHMrKD86XCp8KD86WzEtOV18MVswLTJdfFswLTldKy1bMC05XSt8XCovWzAtOV0rKSlccysoPzpcKnwoPzpbMC02XXxbMC02XS1bMC02XXxcKi9bMC05XSspKSQ="
+ }
+ ],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": "*/5 * * * *",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Schedule"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Only enabled if you select schedule in the SYNC_RUN setting. Make sure you enter the schedule in the correct cron-like format (e.g. validate at crontab.guru). For example entering 0 4 * * * will run the scan after 4 am in the TIMEZONE you set above. Will be run NEXT time the time passes."
+ }
+ ]
+ },
+ {
+ "function": "HOST",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "input", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "maxLength": 100,
+ "default_value": "fritz.box",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Fritz!Box Host"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Hostname or IP address of your Fritz!Box (e.g., fritz.box or 192.168.178.1)"
+ }
+ ]
+ },
+ {
+ "function": "PORT",
+ "type": {
+ "dataType": "integer",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "number" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": 49443,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "TR-064 Port"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "TR-064 port number (default: 49443 for HTTPS, use 49000 for HTTP)"
+ }
+ ]
+ },
+ {
+ "function": "USER",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "input", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "maxLength": 100,
+ "default_value": "",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Username"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Fritz!Box username (can be empty for some models if accessing from local network)"
+ }
+ ]
+ },
+ {
+ "function": "PASS",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "password" }],
+ "transformers": []
+ }
+ ]
+ },
+ "maxLength": 100,
+ "default_value": "",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Password"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Fritz!Box password (required for authentication)"
+ }
+ ]
+ },
+ {
+ "function": "USE_TLS",
+ "type": {
+ "dataType": "boolean",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "checkbox" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": true,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Use HTTPS"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Use HTTPS for TR-064 connection (recommended, requires port 49443)"
+ }
+ ]
+ },
+ {
+ "function": "REPORT_GUEST",
+ "type": {
+ "dataType": "boolean",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "checkbox" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": false,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Report Guest WiFi"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Create a synthetic Access Point device when guest WiFi is active"
+ }
+ ]
+ },
+ {
+ "function": "GUEST_SERVICE",
+ "type": {
+ "dataType": "integer",
+ "elements": [
+ { "elementType": "select", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "default_value": 3,
+ "options": [1, 2, 3],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Guest WiFi Service"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Which WLANConfiguration service is your guest network. Fritz!Box typically uses 3 for guest WiFi, 1 for 2.4GHz, 2 for 5GHz. Only relevant when REPORT_GUEST is enabled."
+ }
+ ]
+ },
+ {
+ "function": "ACTIVE_ONLY",
+ "type": {
+ "dataType": "boolean",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "checkbox" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": true,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Active Devices Only"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Only report currently connected devices (ignores disconnected devices stored in Fritz!Box memory)"
+ }
+ ]
+ },
+ {
+ "function": "CMD",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "readonly": "true" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": "python3 /app/front/plugins/fritzbox/fritzbox.py",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Command"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Command to run. This can not be changed"
+ }
+ ]
+ },
+ {
+ "function": "RUN_TIMEOUT",
+ "type": {
+ "dataType": "integer",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "number" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": 60,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Run timeout"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted."
+ }
+ ]
+ },
+ {
+ "function": "SET_ALWAYS",
+ "type": {
+ "dataType": "array",
+ "elements": [
+ {
+ "elementType": "select",
+ "elementOptions": [{ "multiple": "true", "orderable": "true" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": ["devMac", "devLastIP"],
+ "options": [
+ "devMac",
+ "devLastIP"
+ ],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Set always columns"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "These columns are treated as authoritative and will overwrite existing values, including those set by other plugins, unless the current value was explicitly set by the user (Source = USER or Source = LOCKED)."
+ }
+ ]
+ },
+ {
+ "function": "SET_EMPTY",
+ "type": {
+ "dataType": "array",
+ "elements": [
+ {
+ "elementType": "select",
+ "elementOptions": [{ "multiple": "true", "orderable": "true" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": [],
+ "options": [
+ "devMac",
+ "devLastIP",
+ "devName",
+ "devVendor",
+ "devType",
+ "devSourcePlugin"
+ ],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Set empty columns"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "These columns are only overwritten if they are empty (NULL / empty string) or if their Source is set to NEWDEV"
+ }
+ ]
+ }
+ ],
+ "database_column_definitions": [
+ {
+ "column": "index",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "none",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Index"
+ }
+ ]
+ },
+ {
+ "column": "objectPrimaryId",
+ "mapped_to_column": "scanMac",
+ "css_classes": "col-sm-3",
+ "show": true,
+ "type": "device_name_mac",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "MAC (name)"
+ }
+ ]
+ },
+ {
+ "column": "objectSecondaryId",
+ "mapped_to_column": "scanLastIP",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "device_ip",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "IP"
+ }
+ ]
+ },
+ {
+ "column": "watchedValue1",
+ "mapped_to_column": "scanName",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Name"
+ }
+ ]
+ },
+ {
+ "column": "watchedValue2",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Connection Status"
+ }
+ ]
+ },
+ {
+ "column": "watchedValue3",
+ "mapped_to_column": "scanType",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Interface Type"
+ }
+ ]
+ },
+ {
+ "column": "watchedValue4",
+ "css_classes": "col-sm-2",
+ "show": false,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "N/A"
+ }
+ ]
+ },
+ {
+ "column": "Dummy",
+ "mapped_to_column": "scanSourcePlugin",
+ "mapped_to_column_data": {
+ "value": "Fritz!Box"
+ },
+ "css_classes": "col-sm-2",
+ "show": false,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Scan method"
+ }
+ ]
+ },
+ {
+ "column": "dateTimeCreated",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Created"
+ }
+ ]
+ },
+ {
+ "column": "dateTimeChanged",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Changed"
+ }
+ ]
+ },
+ {
+ "column": "status",
+ "css_classes": "col-sm-1",
+ "show": true,
+ "type": "replace",
+ "default_value": "",
+ "options": [
+ {
+ "equals": "watched-not-changed",
+ "replacement": "