jokob-sk / NetAlertX

🖧🔍 WIFI / LAN intruder detector. Scans for devices connected to your network and alerts you if new and unknown devices are found.
GNU General Public License v3.0
2.84k stars 163 forks source link

Bug: Pi.Alert Not Remembering New Devices After Latest Update 23.10.2 #481

Closed bartmkraus closed 10 months ago

bartmkraus commented 11 months ago

After updating Pi.Alert to the latest version 23.10.2, I've encountered a bug where the application no longer remembers new devices that connect to the network.

Steps to Reproduce:

To reproduce the issue, follow these steps:

Update Pi.Alert to the latest version.
Allow new devices to connect to your network.
Observe that Pi.Alert fails to remember these new devices.

Expected Behavior:

Before the update, Pi.Alert correctly identified and remembered new devices as they connected to the network. After the update, I expected it to continue functioning as it did previously.

Actual Behavior:

The software no longer remembers new devices, making it less effective for network monitoring and security.

Additional Information:

Pi.Alert Version: 23.10.2

Attached a screenshot of the Events section for reference:

Zrzut ekranu 2023-10-13 o 17 48 21

jokob-sk commented 11 months ago

Hi @bartmkraus ,

  1. Can you please share your configuration file?

There are some settings that auto-delete new devices if enabled (e.g. HRS_TO_KEEP_NEWDEV). Please share the whole file with personal info redacted so I can make sure it's not expected behavior based on the configured settings.

  1. Can you share the pialert.log file of the section where a new device is discovered? You can check this thread as the issues might be related: https://github.com/jokob-sk/Pi.Alert/issues/474

Thanks in advance, j

bartmkraus commented 11 months ago

Hello @jokob-sk, thank you for your reply. Would you like to review my entire configuration file? I will review the pialert.log file this week (I have PiAlert running in a different location).

`# General

---------------------------

LOG_LEVEL='verbose' LOG_LEVELmetadata="{}" TIMEZONE='Europe/Berlin' TIMEZONEmetadata="{}" PLUGINS_KEEP_HIST=10000 PLUGINS_KEEP_HISTmetadata="{}" PIALERT_WEB_PROTECTION=False PIALERT_WEB_PROTECTIONmetadata="{}" PIALERT_WEB_PASSWORD='secret' PIALERT_WEB_PASSWORDmetadata="{}" INCLUDED_SECTIONS=['new_devices','down_devices','events'] INCLUDED_SECTIONSmetadata="{}" REPORT_DASHBOARD_URL="mysite" REPORT_DASHBOARD_URLmetadata="{}" DIG_GET_IP_ARG='-4 myip.opendns.com @resolver1.opendns.com' DIG_GET_IP_ARGmetadata="{}" UI_LANG='English' UI_LANGmetadata="{}" UI_PRESENCE=['online','offline','archived'] UI_PRESENCEmetadata="{}" DAYS_TO_KEEP_EVENTS=90 DAYS_TO_KEEP_EVENTSmetadata="{}" HRS_TO_KEEP_NEWDEV=0 HRS_TO_KEEP_NEWDEVmetadata="{}" API_CUSTOM_SQL='SELECT COUNT(*) FROM Devices WHERE dev_Archived=0 AND dev_PresentLastScan=1 AND dev_Group!="Infrastructure"' API_CUSTOM_SQLmetadata="{}" NETWORK_DEVICE_TYPES=['AP','Gateway','Firewall','Hypervisor','Powerline','Switch','WLAN','PLC','Router','USB LAN Adapter','USB WIFI Adapter','Internet'] NETWORK_DEVICE_TYPESmetadata="{}" ` Thanks! Bart

jokob-sk commented 11 months ago

Hi @bartmkraus ,

Yes, please provide the whole config, if possible 🙏

Also, please set LOG_LEVEL='verbose' to 'debug' so we get better logging.

Thanks!

More debugging tips: https://github.com/jokob-sk/Pi.Alert/blob/main/docs/DEBUG_TIPS.md

bartmkraus commented 11 months ago

Hello @jokob-sk, I apologize for the slight delay in responding. Below is my entire config.

`LOG_LEVEL='debug'
LOG_LEVEL__metadata="{}"
TIMEZONE='Europe/Berlin'
TIMEZONE__metadata="{}"
PLUGINS_KEEP_HIST=10000
PLUGINS_KEEP_HIST__metadata="{}"
PIALERT_WEB_PROTECTION=False
PIALERT_WEB_PROTECTION__metadata="{}"
PIALERT_WEB_PASSWORD='password'
PIALERT_WEB_PASSWORD__metadata="{}"
INCLUDED_SECTIONS=['new_devices','down_devices','events']
INCLUDED_SECTIONS__metadata="{}"
REPORT_DASHBOARD_URL='https://mysite.com'
REPORT_DASHBOARD_URL__metadata="{}"
DIG_GET_IP_ARG='-4 myip.opendns.com @resolver1.opendns.com'
DIG_GET_IP_ARG__metadata="{}"
UI_LANG='English'
UI_LANG__metadata="{}"
UI_PRESENCE=['online','offline','archived']
UI_PRESENCE__metadata="{}"
DAYS_TO_KEEP_EVENTS=90
DAYS_TO_KEEP_EVENTS__metadata="{}"
HRS_TO_KEEP_NEWDEV=0
HRS_TO_KEEP_NEWDEV__metadata="{}"
API_CUSTOM_SQL='SELECT COUNT(*) FROM Devices WHERE dev_Archived=0 AND dev_PresentLastScan=1 AND dev_Group!="Infrastructure"'
API_CUSTOM_SQL__metadata="{}"
NETWORK_DEVICE_TYPES=['AP','Gateway','Firewall','Hypervisor','Powerline','Switch','WLAN','PLC','Router','USB LAN Adapter','USB WIFI Adapter','Internet']
NETWORK_DEVICE_TYPES__metadata="{}"

# ARPSCAN
#---------------------------
SCAN_SUBNETS=['192.168.0.0/24 --interface=ens160']
SCAN_SUBNETS__metadata="{}"
ARPSCAN_RUN='schedule'
ARPSCAN_RUN__metadata="{\"function\": \"RUN\", \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"events\": [\"run\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Specify when your Network-discovery scan will run. Typical setting would be <code>schedule</code> and then you specify a cron-like schedule in the <a href=\\\"#ARPSCAN_RUN_SCHD\\\"><code>ARPSCAN_RUN_SCHD</code>setting</a> \"}, {\"language_code\": \"es_es\", \"string\": \"Especifique cu\\u00e1ndo se ejecutar\\u00e1 su an\\u00e1lisis de descubrimiento de red. La configuraci\\u00f3n t\\u00edpica ser\\u00eda <code>schedule</code> y luego se especifica una programaci\\u00f3n similar a cron en la configuraci\\u00f3n <a href=\\\"#ARPSCAN_RUN_SCHD\\\"><code>ARPSCAN_RUN_SCHD</code></a> \"}]}"
ARPSCAN_CMD='python3 /home/pi/pialert/front/plugins/arp_scan/script.py userSubnets={subnets}'
ARPSCAN_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/arp_scan/script.py userSubnets={subnets}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This should not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando para ejecutar. Esto no debe ser cambiado\"}]}"
ARPSCAN_RUN_TIMEOUT=1200
ARPSCAN_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 300, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, se cancela el script.\"}]}"
ARPSCAN_RUN_SCHD='*/5 * * * *'
ARPSCAN_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"*/3 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#ARPSCAN_RUN\\\"><code>ARPSCAN_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>*/3 * * * *</code> will run the scan every 3 minutes. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#ARPSCAN_RUN\\\"><code>ARPSCAN_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>*/3 * * * *</code> ejecutar\\u00e1 el escaneo cada 3 minutos. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo. <br/> Se recomienda utilizar el mismo intervalo de programaci\\u00f3n para todos los complementos que analizan su red.\"}]}"
ARPSCAN_WATCH=['Watched_Value1','Watched_Value2']
ARPSCAN_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\", \"Watched_Value2\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Watched\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is IP</li><li><code>Watched_Value2</code> is Vendor</li><li><code>Watched_Value3</code> is Interface </li><li><code>Watched_Value4</code> is N/A </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00eda una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Valor_observado1</code> es IP</li><li><code>Valor_observado2</code> es Proveedor</li><li><code>Valor_observado3</code> es Interfaz </li><li><code>Valor_observado4</code> es N/A </li></ul>\"}]}"
ARPSCAN_REPORT_ON=['new']
ARPSCAN_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When should notification be sent out.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo debe enviarse una notificaci\\u00f3n.\"}]}"

# Email
#---------------------------
REPORT_MAIL=False
REPORT_MAIL__metadata="{}"
SMTP_SERVER='smtp.gmail.com'
SMTP_SERVER__metadata="{}"
SMTP_PORT=587
SMTP_PORT__metadata="{}"
REPORT_TO='user@gmail.com'
REPORT_TO__metadata="{}"
REPORT_FROM='Pi.Alert <user@gmail.com>'
REPORT_FROM__metadata="{}"
SMTP_SKIP_LOGIN=False
SMTP_SKIP_LOGIN__metadata="{}"
SMTP_USER='user@gmail.com'
SMTP_USER__metadata="{}"
SMTP_PASS='password'
SMTP_PASS__metadata="{}"
SMTP_SKIP_TLS=False
SMTP_SKIP_TLS__metadata="{}"
SMTP_FORCE_SSL=False
SMTP_FORCE_SSL__metadata="{}"

# Webhooks
#---------------------------
REPORT_WEBHOOK=False
REPORT_WEBHOOK__metadata="{}"
WEBHOOK_URL='http://n8n.local:5555/webhook-test/aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa'
WEBHOOK_URL__metadata="{}"
WEBHOOK_PAYLOAD='json'
WEBHOOK_PAYLOAD__metadata="{}"
WEBHOOK_REQUEST_METHOD='GET'
WEBHOOK_REQUEST_METHOD__metadata="{}"
WEBHOOK_SIZE=1024
WEBHOOK_SIZE__metadata="{}"
WEBHOOK_SECRET=''
WEBHOOK_SECRET__metadata="{}"

# Apprise
#---------------------------
REPORT_APPRISE=False
REPORT_APPRISE__metadata="{}"
APPRISE_HOST='http://localhost:8000/notify'
APPRISE_HOST__metadata="{}"
APPRISE_URL='mailto://smtp-relay.sendinblue.com:587?from=user@gmail.com&name=apprise&user=user@gmail.com&pass=password&to=user@gmail.com'
APPRISE_URL__metadata="{}"
APPRISE_PAYLOAD='html'
APPRISE_PAYLOAD__metadata="{}"
APPRISE_SIZE=1024
APPRISE_SIZE__metadata="{}"

# NTFY
#---------------------------
REPORT_NTFY=False
REPORT_NTFY__metadata="{}"
NTFY_HOST='https://ntfy.sh'
NTFY_HOST__metadata="{}"
NTFY_TOPIC='hidden'
NTFY_TOPIC__metadata="{}"
NTFY_USER='user'
NTFY_USER__metadata="{}"
NTFY_PASSWORD='password'
NTFY_PASSWORD__metadata="{}"

# PUSHSAFER
#---------------------------
REPORT_PUSHSAFER=False
REPORT_PUSHSAFER__metadata="{}"
PUSHSAFER_TOKEN='ApiKey'
PUSHSAFER_TOKEN__metadata="{}"

# MQTT
#---------------------------
REPORT_MQTT=True
REPORT_MQTT__metadata="{}"
MQTT_BROKER='mqtt.mysite'
MQTT_BROKER__metadata="{}"
MQTT_PORT=1883
MQTT_PORT__metadata="{}"
MQTT_USER='me'
MQTT_USER__metadata="{}"
MQTT_PASSWORD='password'
MQTT_PASSWORD__metadata="{}"
MQTT_QOS=0
MQTT_QOS__metadata="{}"
MQTT_DELAY_SEC=2
MQTT_DELAY_SEC__metadata="{}"

# NMAP
#---------------------------
NMAP_RUN='disabled'
NMAP_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable a regular Nmap scan on your network on all devices. The scheduling settings can be found below. If you select <code>once</code> Nmap is run only once on start for the time specified in <a href=\\\"#NMAP_TIMEOUT\\\"><code>NMAP_TIMEOUT</code> setting</a>.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite un escaneo regular de Nmap en su red en todos los dispositivos. Los ajustes de programaci\\u00f3n se pueden encontrar a continuaci\\u00f3n. Si selecciona <code>una vez</code>, Nmap se ejecuta solo una vez al inicio durante el tiempo especificado en la configuraci\\u00f3n de <a href=\\\"#NMAP_TIMEOUT\\\"><code>NMAP_TIMEOUT</code></a>\"}]}"
NMAP_CMD='python3 /home/pi/pialert/front/plugins/nmap_scan/script.py ips={ips} macs={macs} timeout={timeout} args={args}'
NMAP_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/nmap_scan/script.py ips={ips} macs={macs} timeout={timeout} args={args}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SQL to run\"}, {\"language_code\": \"es_es\", \"string\": \"Consulta SQL\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"This calls the script responsible for executing the NMAP scan.\"}, {\"language_code\": \"es_es\", \"string\": \"Esto llama al script responsable de ejecutar el escaneo NMAP.\"}]}"
NMAP_ARGS='-p -10000'
NMAP_ARGS__metadata="{\"function\": \"ARGS\", \"type\": \"text\", \"default_value\": \"-p -10000\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Arguments\"}, {\"language_code\": \"es_es\", \"string\": \"Argumentos\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Arguments used to run the Nmap scan. Be careful to specify <a href=\\\"https://linux.die.net/man/1/nmap\\\" target=\\\"_blank\\\">the arguments</a> correctly. For example <code>-p -10000</code> scans ports from 1 to 10000.\"}, {\"language_code\": \"es_es\", \"string\": \"Argumentos utilizados para ejecutar el an\\u00e1lisis de Nmap. Tenga cuidado de especificar <a href=\\\"https://linux.die.net/man/1/nmap\\\" target=\\\"_blank\\\">los argumentos</a> correctamente. Por ejemplo, <code>-p -10000</code> escanea los puertos del 1 al 10000.\"}]}"
NMAP_RUN_SCHD='0 2 * * *'
NMAP_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#NMAP_RUN\\\"><code>NMAP_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>programar</code> en la configuraci\\u00f3n de <a href=\\\"#NMAP_RUN\\\"><code>NMAP_RUN</code></a>. Aseg\\u00farese de ingresar el cronograma en el formato tipo cron correcto.\"}]}"
NMAP_RUN_TIMEOUT=30
NMAP_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Max run time per device in seconds.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo de ejecuci\\u00f3n por dispositivo en segundos.\"}]}"
NMAP_WATCH=['Watched_Value1']
NMAP_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is service type (e.g.: http, ssh)</li><li><code>Watched_Value2</code> is Status (open or closed)</li><li><code>Watched_Value3</code> unused </li><li><code>Watched_Value4</code> unused </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es el tipo de servicio (p. ej., http, ssh)</li><li><code>Watched_Value2</code> es el estado (abierto o cerrado)</li> <li><code>Watched_Value3</code> no utilizado </li><li><code>Watched_Value4</code> no utilizado </li></ul>\"}]}"
NMAP_REPORT_ON=['new','watched-changed']
NMAP_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que seleccion\\u00f3 <code>Watched_ValueN Las columnas </code> cambiaron.\"}]}"

# WEBMON
#---------------------------
WEBMON_RUN='disabled'
WEBMON_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecuta\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable a regular scan of your services. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) for the time specified in <a href=\\\"#WEBMON_RUN_TIMEOUT\\\"><code>WEBMON_RUN_TIMEOUT</code> setting</a>.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite un escaneo regular de sus servicios. Si selecciona <code>schedule</code>, se aplican las configuraciones de programaci\\u00f3n de abajo. Si selecciona <code>once</code>, el escaneo se ejecuta solo una vez al iniciar la aplicaci\\u00f3n (contenedor) durante el tiempo especificado en <a href=\\\"#WEBMON_RUN_TIMEOUT\\\"><code>WEBMON_RUN_TIMEOUT</code> configuraci\\u00f3n</a>.\"}]}"
WEBMON_CMD='python3 /home/pi/pialert/front/plugins/website_monitor/script.py urls={urls}'
WEBMON_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/website_monitor/script.py urls={urls}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar\"}]}"
WEBMON_RUN_SCHD='0 2 * * *'
WEBMON_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#WEBMON_RUN\\\"><code>WEBMON_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#WEBMON_RUN\\\"><code>WEBMON_RUN</code></a>. Aseg\\u00farese de ingresar el schedule en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingrese <code >0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 am en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> que configur\\u00f3 arriba </a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}]}"
WEBMON_API_SQL='SELECT * FROM plugin_website_monitor'
WEBMON_API_SQL__metadata="{\"function\": \"API_SQL\", \"type\": \"text\", \"default_value\": \"SELECT * FROM plugin_website_monitor\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"API endpoint (not implemented)\"}, {\"language_code\": \"es_es\", \"string\": \"Punto de conexi\\u00f3n de la API (no implementado)\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\\\"/api/plugin_website_monitor.json\\\" target=\\\"_blank\\\"><code>plugin_website_monitor.json</code> file endpoint</a>.\"}, {\"language_code\": \"es_es\", \"string\": \"Puede especificar una consulta SQL personalizada que generar\\u00e1 un archivo JSON y luego lo expondr\\u00e1 a trav\\u00e9s de <a href=\\\"/api/plugin_website_monitor.json\\\" target=\\\"_blank\\\"><code>plugin_website_monitor.json</code> punto final del archivo</a>.\"}]}"
WEBMON_RUN_TIMEOUT=5
WEBMON_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 5, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo de espera de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Wartezeit\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}]}"
WEBMON_WATCH=['Watched_Value1']
WEBMON_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is response status code (e.g.: 200, 404)</li><li><code>Watched_Value2</code> is Latency (not recommended)</li><li><code>Watched_Value3</code> unused </li><li><code>Watched_Value4</code> unused </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Use <code>CTRL + Click</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es un c\\u00f3digo de estado de respuesta (por ejemplo: 200, 404) </li><li><code>Valor_observado2</code> es Latencia (no recomendado)</li><li><code>Valor_observado3</code> no utilizado </li><li><code>Valor_observado4 </ code> sin usar </li></ul>\"}]}"
WEBMON_REPORT_ON=['new','watched-changed']
WEBMON_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que seleccion\\u00f3 <code>Watched_ValueN Las columnas </code> cambiaron.\"}]}"
WEBMON_urls_to_check=['https://google.com','https://duck.com']
WEBMON_urls_to_check__metadata="{\"function\": \"urls_to_check\", \"type\": \"list\", \"default_value\": [\"https://google.com\", \"https://duck.com\"], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Arguments\"}, {\"language_code\": \"es_es\", \"string\": \"Argumentos\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Services to watch. Enter full URL, e.g. <code>https://google.com</code>. The values from this setting will be used to replace the <code>{urls}</code> wildcard in the <code>WEBMON_CMD</code> setting.\"}, {\"language_code\": \"es_es\", \"string\": \"Servicios para ver. Ingrese la URL completa, por ejemplo, <code>https://google.com</code>. Los valores de esta configuraci\\u00f3n se usar\\u00e1n para reemplazar el comod\\u00edn <code>{urls}</code> en la configuraci\\u00f3n < code>WEBMON_CMD</code>.\"}]}"
WEBMON_SQL_internet_ip='SELECT dev_LastIP FROM Devices WHERE dev_MAC = {s-quote}Internet{s-quote}'
WEBMON_SQL_internet_ip__metadata="{\"function\": \"SQL_internet_ip\", \"type\": \"readonly\", \"default_value\": \"SELECT dev_LastIP FROM Devices WHERE dev_MAC = 'Internet'\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Helper variable\"}, {\"language_code\": \"es_es\", \"string\": \"Variable de ayuda\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Unused setting - for demonstration only. Getting the IP address of the Router / Internet.\"}, {\"language_code\": \"es_es\", \"string\": \"Configuraci\\u00f3n no utilizada: solo para demostraci\\u00f3n. Obtener la direcci\\u00f3n IP del enrutador / Internet.\"}]}"

# DHCPLSS
#---------------------------
DHCPLSS_RUN='disabled'
DHCPLSS_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable import of devices from <code>dhcp.leases</code> files. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite la importaci\\u00f3n de dispositivos desde archivos <code>dhcp.leases</code>. Si selecciona <code>schedule</code>, se aplican las configuraciones de programaci\\u00f3n de abajo. Si selecciona <code>once</code>, el an\\u00e1lisis se ejecuta solo una vez al inicio de la aplicaci\\u00f3n (contenedor) o despu\\u00e9s de actualizar su configuraci\\u00f3n.\"}]}"
DHCPLSS_CMD='python3 /home/pi/pialert/front/plugins/dhcp_leases/script.py paths={paths}'
DHCPLSS_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/dhcp_leases/script.py paths={paths}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar\"}]}"
DHCPLSS_paths_to_check=['/mnt/dhcp1.leases','/mnt/dhcp2.leases']
DHCPLSS_paths_to_check__metadata="{\"function\": \"paths_to_check\", \"type\": \"list\", \"default_value\": [\"/mnt/dhcp1.leases\", \"/mnt/dhcp2.leases\"], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Files\"}, {\"language_code\": \"es_es\", \"string\": \"Archivos\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Add all dhcp.leases mapped paths to watch. Enter full path within the container, e.g. <code>/mnt/dhcp2.leases</code>. You must map these files accordingly in your <code>docker-compose.yml</code> file. (If you are mapping a PiHole dhcp.leases file the path in the container must contain <code>pihole</code>, e.g.: <code>:/etc/pihole/dhcp.leases</code>)\"}, {\"language_code\": \"es_es\", \"string\": \"Agregue todas las rutas asignadas de dhcp.leases para observar. Ingrese la ruta completa dentro del contenedor, p.e. <code>/mnt/dhcp2.leases</code>. Debe asignar estos archivos en consecuencia en su archivo <code>docker-compose.yml</code>. (Si est\\u00e1 asignando un archivo PiHole dhcp.leases, la ruta en el contenedor debe contener <code>pihole</code>, por ejemplo: <code>:/etc/pihole/dhcp.leases</code>)\"}]}"
DHCPLSS_RUN_SCHD='0 2 * * *'
DHCPLSS_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#DHCPLSS_RUN\\\"><code>DHCPLSS_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#DHCPLSS_RUN\\\"><code>DHCPLSS_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}]}"
DHCPLSS_RUN_TIMEOUT=5
DHCPLSS_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 5, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo de espera de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Wartezeit\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}]}"
DHCPLSS_WATCH=['Watched_Value1','Watched_Value4']
DHCPLSS_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\", \"Watched_Value4\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Active </li><li><code>Watched_Value2</code> is Hostname </li><li><code>Watched_Value3</code> is hardware </li><li><code>Watched_Value4</code> is State </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Enviar una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> est\\u00e1 activo </li><li><code>Watched_Value2</code> es el nombre de host </li><li><code>Watched_Value3</code > es hardware </li><li><code>Watched_Value4</code> es Estado </li></ul>\"}]}"
DHCPLSS_REPORT_ON=['new','watched-changed']
DHCPLSS_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}]}"

# DHCPSRVS
#---------------------------
DHCPSRVS_RUN='disabled'
DHCPSRVS_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable a regular scan of rogue DHCP servers. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite un escaneo regular de servidores DHCP no autorizados. Si selecciona <code>schedule</code>, se aplican las configuraciones de programaci\\u00f3n de abajo. Si selecciona <code>once</code>, el an\\u00e1lisis se ejecuta solo una vez al inicio de la aplicaci\\u00f3n (contenedor) o despu\\u00e9s de actualizar su configuraci\\u00f3n.\"}]}"
DHCPSRVS_CMD='python3 /home/pi/pialert/front/plugins/dhcp_servers/script.py'
DHCPSRVS_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/dhcp_servers/script.py\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar\"}]}"
DHCPSRVS_RUN_SCHD='0 2 * * *'
DHCPSRVS_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Programar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#DHCPSRVS_RUN\\\"><code>DHCPSRVS_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n de <a href=\\\"#DHCPSRVS_RUN\\\"><code>DHCPSRVS_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}]}"
DHCPSRVS_RUN_TIMEOUT=5
DHCPSRVS_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 5, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo de espera de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Wartezeit\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}]}"
DHCPSRVS_WATCH=['Watched_Value1']
DHCPSRVS_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Domain Name Server</li><li><code>Watched_Value2</code> is IP Offered</li><li><code>Watched_Value3</code> is Interface </li><li><code>Watched_Value4</code> is Router </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es servidor de nombres de dominio</li><li><code>Watched_Value2</code> es IP ofrecida</li><li><code>Watched_Value3</code> es Interfaz </li><li><code>Watched_Value4</code> es enrutador </li></ul>\"}]}"
DHCPSRVS_REPORT_ON=['new','watched-changed']
DHCPSRVS_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}]}"

# INTRNT
#---------------------------
INTRNT_RUN='schedule'
INTRNT_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. An hourly or daily <code>SCHEDULE</code> is a good option.\"}]}"
INTRNT_CMD='python3 /home/pi/pialert/front/plugins/internet_ip/script.py prev_ip={prev_ip} DIG_GET_IP_ARG={DIG_GET_IP_ARG}'
INTRNT_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/internet_ip/script.py prev_ip={prev_ip} DIG_GET_IP_ARG={DIG_GET_IP_ARG}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl zum Ausf\\u00fchren. Dies kann nicht ge\\u00e4ndert werden\"}]}"
INTRNT_RUN_SCHD='*/5 * * * *'
INTRNT_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"*/5 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}, {\"language_code\": \"de_de\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#INTRNT_RUN\\\"><code>INTRNT_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#INTRNT_RUN\\\"><code>INTRNT_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\\\"#INTRNT_RUN\\\"><code>INTRNT_RUN</code>-Einstellung</a> ausw\\u00e4hlen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-\\u00e4hnlichen Format eingeben (z. B. validieren unter <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ ausgef\\u00fchrt. Code> den Sie oben festgelegt haben</a>. Wird das N\\u00c4CHSTE Mal ausgef\\u00fchrt, wenn die Zeit vergeht.\"}]}"
INTRNT_RUN_TIMEOUT=30
INTRNT_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Zeit\\u00fcberschreitung\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei \\u00dcberschreitung dieser Zeit wird das Skript abgebrochen.\"}]}"
INTRNT_WATCH=['Watched_Value1']
INTRNT_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Previous IP (not recommended)</li><li><code>Watched_Value2</code> unused</li><li><code>Watched_Value3</code> unused </li><li><code>Watched_Value4</code> unused </li></ul>\"}]}"
INTRNT_REPORT_ON=['new','watched-changed']
INTRNT_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}]}"

# NEWDEV
#---------------------------
NEWDEV_dev_MAC=''
NEWDEV_dev_MAC__metadata="{\"function\": \"dev_MAC\", \"type\": \"readonly\", \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device MAC\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The MAC address of the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_Name='(unknown)'
NEWDEV_dev_Name__metadata="{\"function\": \"dev_Name\", \"type\": \"readonly\", \"maxLength\": 50, \"default_value\": \"(unknown)\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Name\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The name of the device. Uneditable as internal functionality is dependent on specific new device names.\"}]}"
NEWDEV_dev_Owner__metadata="{\"function\": \"dev_Owner\", \"type\": \"string\", \"maxLength\": 30, \"default_value\": \"House\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Owner\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The owner of the device.\"}]}"
NEWDEV_dev_DeviceType__metadata="{\"function\": \"dev_DeviceType\", \"type\": \"string\", \"maxLength\": 30, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Type\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The type of the device.\"}]}"
NEWDEV_dev_Vendor=''
NEWDEV_dev_Vendor__metadata="{\"function\": \"dev_Vendor\", \"type\": \"readonly\", \"maxLength\": 250, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Vendor\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The vendor of the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_Favorite=False
NEWDEV_dev_Favorite__metadata="{\"function\": \"dev_Favorite\", \"type\": \"integer.checkbox\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Favorite Device\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether the device is marked as a favorite.\"}]}"
NEWDEV_dev_Group__metadata="{\"function\": \"dev_Group\", \"type\": \"string\", \"maxLength\": 10, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Group\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The group to which the device belongs.\"}]}"
NEWDEV_dev_Comments__metadata="{\"function\": \"dev_Comments\", \"type\": \"string\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Comments\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Additional comments or notes about the device.\"}]}"
NEWDEV_dev_FirstConnection=''
NEWDEV_dev_FirstConnection__metadata="{\"function\": \"dev_FirstConnection\", \"type\": \"readonly\", \"format\": \"date-time\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"First Connection\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The date and time of the first connection with the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_LastConnection=''
NEWDEV_dev_LastConnection__metadata="{\"function\": \"dev_LastConnection\", \"type\": \"readonly\", \"format\": \"date-time\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Last Connection\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The date and time of the last connection with the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_LastIP=''
NEWDEV_dev_LastIP__metadata="{\"function\": \"dev_LastIP\", \"type\": \"readonly\", \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Last IP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The last known IP address of the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_StaticIP=False
NEWDEV_dev_StaticIP__metadata="{\"function\": \"dev_StaticIP\", \"type\": \"integer.checkbox\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Static IP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether the device has a static IP address.\"}]}"
NEWDEV_dev_ScanCycle=True
NEWDEV_dev_ScanCycle__metadata="{\"function\": \"dev_ScanCycle\", \"type\": \"integer.checkbox\", \"default_value\": 1, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Scan Cycle\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The default value of the <code>Scan device</code> dropdown. Enable if newly discovered devices should be scanned.\"}]}"
NEWDEV_dev_LogEvents=True
NEWDEV_dev_LogEvents__metadata="{\"function\": \"dev_LogEvents\", \"type\": \"integer.checkbox\", \"default_value\": 1, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Log Events\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether events related to the device shouldbe logged.\"}]}"
NEWDEV_dev_AlertEvents=True
NEWDEV_dev_AlertEvents__metadata="{\"function\": \"dev_AlertEvents\", \"type\": \"integer.checkbox\", \"default_value\": 1, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Alert Events\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether events related to the device should trigger alerts. The default value of the <code>Alert All Events</code> checkbox.\"}]}"
NEWDEV_dev_AlertDeviceDown=False
NEWDEV_dev_AlertDeviceDown__metadata="{\"function\": \"dev_AlertDeviceDown\", \"type\": \"integer.checkbox\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Alert Device Down\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether an alert should be triggered when the device goes down. The default value of the <code>Alert Down</code> checkbox.\"}]}"
NEWDEV_dev_SkipRepeated=0
NEWDEV_dev_SkipRepeated__metadata="{\"function\": \"dev_SkipRepeated\", \"type\": \"integer\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Skip Repeated\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The default value of the <code>Skip repeated notifications for</code> dropdown. Enter number of <b>hours</b> for which repeated notifications should be ignored for. If you enter <code>0</code> then you get notified on all events.\"}]}"
NEWDEV_dev_LastNotification=''
NEWDEV_dev_LastNotification__metadata="{\"function\": \"dev_LastNotification\", \"type\": \"readonly\", \"format\": \"date-time\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Last Notification\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The date and time of the last notification sent for the device. Uneditable - Autodetected.\"}]}"
NEWDEV_dev_PresentLastScan=True
NEWDEV_dev_PresentLastScan__metadata="{\"function\": \"dev_PresentLastScan\", \"type\": \"integer.checkbox\", \"default_value\": 1, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Present Last Scan\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether the device should be marked as present after detected in a scan.\"}]}"
NEWDEV_dev_NewDevice=True
NEWDEV_dev_NewDevice__metadata="{\"function\": \"dev_NewDevice\", \"type\": \"integer.checkbox\", \"default_value\": true, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"New Device\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether the device is considered a new device. The default value of the <code>New Device</code> checkbox.\"}]}"
NEWDEV_dev_Location__metadata="{\"function\": \"dev_Location\", \"type\": \"string\", \"maxLength\": 250, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Location\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The location of the device.\"}]}"
NEWDEV_dev_Archived=False
NEWDEV_dev_Archived__metadata="{\"function\": \"dev_Archived\", \"type\": \"integer.checkbox\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Archived\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Indicates whether the device is archived. The default value of the <code>Archived</code> checkbox.\"}]}"
NEWDEV_dev_Network_Node_MAC_ADDR__metadata="{\"function\": \"dev_Network_Node_MAC_ADDR\", \"type\": \"string\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Network Node MAC Address\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The MAC address of the network node.\"}]}"
NEWDEV_dev_Network_Node_port='0'
NEWDEV_dev_Network_Node_port__metadata="{\"function\": \"dev_Network_Node_port\", \"type\": \"readonly\", \"default_value\": 0, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Network Node Port\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The port number of the network node. Uneditable.\"}]}"
NEWDEV_dev_Icon__metadata="{\"function\": \"dev_Icon\", \"type\": \"string\", \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Icon\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The icon associated with the device. Check the <a href=\\\"https://github.com/jokob-sk/Pi.Alert/blob/main/docs/ICONS.md\\\" target=\\\"_blank\\\">documentation on icons</a> for more details.\"}]}"

# CSVBCKP
#---------------------------
CSVBCKP_RUN='schedule'
CSVBCKP_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the backup should be created. A daily or weekly <code>SCHEDULE</code> is a good option.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo se debe crear la copia de seguridad. Un <code>SCHEDULE</code> diario o semanal es una buena opci\\u00f3n.\"}, {\"language_code\": \"de_de\", \"string\": \"Wann das Backup erstellt werden soll. Ein t\\u00e4glicher oder w\\u00f6chentlicher <code>SCHEDULE</code> ist eine gute Option.\"}]}"
CSVBCKP_CMD='python3 /home/pi/pialert/front/plugins/csv_backup/script.py overwrite={overwrite} location={location}'
CSVBCKP_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/csv_backup/script.py overwrite={overwrite} location={location}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl zum Ausf\\u00fchren. Dies kann nicht ge\\u00e4ndert werden\"}]}"
CSVBCKP_RUN_SCHD='0 2 * * 3'
CSVBCKP_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * 3\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}, {\"language_code\": \"de_de\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#CSVBCKP_RUN\\\"><code>CSVBCKP_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#CSVBCKP_RUN\\\"><code>CSVBCKP_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\\\"#CSVBCKP_RUN\\\"><code>CSVBCKP_RUN</code>-Einstellung</a> ausw\\u00e4hlen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-\\u00e4hnlichen Format eingeben (z. B. validieren unter <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ ausgef\\u00fchrt. Code> den Sie oben festgelegt haben</a>. Wird das N\\u00c4CHSTE Mal ausgef\\u00fchrt, wenn die Zeit vergeht.\"}]}"
CSVBCKP_RUN_TIMEOUT=30
CSVBCKP_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Zeit\\u00fcberschreitung\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei \\u00dcberschreitung dieser Zeit wird das Skript abgebrochen.\"}]}"
CSVBCKP_overwrite=False
CSVBCKP_overwrite__metadata="{\"function\": \"overwrite\", \"type\": \"boolean\", \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Overwrite file\"}, {\"language_code\": \"es_es\", \"string\": \"Sobrescribir archivo\"}, {\"language_code\": \"de_de\", \"string\": \"Datei \\u00fcberschreiben\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"If the <code>devices.csv</code> file should be always overwritten. If disabled, the date and time is added to the name.\"}, {\"language_code\": \"es_es\", \"string\": \"Si el archivo <code>devices.csv</code> siempre debe sobrescribirse. Si est\\u00e1 deshabilitado, la fecha y la hora se agregan al nombre.\"}, {\"language_code\": \"de_de\", \"string\": \"Wenn die Datei <code>devices.csv</code> immer \\u00fcberschrieben werden soll. Wenn deaktiviert, werden dem Namen Datum und Uhrzeit hinzugef\\u00fcgt.\"}]}"
CSVBCKP_location='/home/pi/pialert/config'
CSVBCKP_location__metadata="{\"function\": \"location\", \"type\": \"text\", \"default_value\": \"/home/pi/pialert/config\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"File location\"}, {\"language_code\": \"es_es\", \"string\": \"Ubicaci\\u00f3n del archivo\"}, {\"language_code\": \"de_de\", \"string\": \"Speicherort\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Where the <code>devices.csv</code> file should be saved. For example <code>/home/pi/pialert/config</code>.\"}, {\"language_code\": \"es_es\", \"string\": \"Donde se debe guardar el archivo <code>devices.csv</code>. Por ejemplo <code>/home/pi/pialert/config</code>.\"}, {\"language_code\": \"de_de\", \"string\": \"Wo die Datei <code>devices.csv</code> gespeichert werden soll. Zum Beispiel <code>/home/pi/pialert/config</code>.\"}]}"

# PIHOLE
#---------------------------
PIHOLE_RUN='disabled'
PIHOLE_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Specify when your PiHole device import from the PiHole databse will run. The typical setting would be <code>schedule</code> and then you specify a cron-like schedule in the <a href=\\\"#PIHOLE_RUN_SCHD\\\"><code>PIHOLE_RUN_SCHD</code>setting</a>. If enabled, you must map the pihole db into your container to the <code>:/etc/pihole/pihole-FTL.db</code> mount path as specified in the <code>DB_PATH</code> setting.\"}, {\"language_code\": \"es_es\", \"string\": \"Especifique cu\\u00e1ndo se ejecutar\\u00e1 la importaci\\u00f3n de su dispositivo PiHole desde la base de datos de PiHole. La configuraci\\u00f3n t\\u00edpica ser\\u00eda <code>schedule</code> y luego especifica una programaci\\u00f3n similar a cron en la configuraci\\u00f3n <a href=\\\"#PIHOLE_RUN_SCHD\\\"><code>PIHOLE_RUN_SCHD</code></a>. Si est\\u00e1 habilitado, debe asignar la base de datos pihole en su contenedor a la ruta de montaje <code>:/etc/pihole/pihole-FTL.db</code> como se especifica en la configuraci\\u00f3n <code>DB_PATH</code>.\"}]}"
PIHOLE_CMD='SELECT n.hwaddr AS Object_PrimaryID, {s-quote}null{s-quote} AS Object_SecondaryID, datetime() AS DateTime, na.ip  AS Watched_Value1, n.lastQuery AS Watched_Value2, na.name AS Watched_Value3, n.macVendor AS Watched_Value4, {s-quote}null{s-quote} AS Extra, n.hwaddr AS ForeignKey FROM EXTERNAL_PIHOLE.Network AS n LEFT JOIN EXTERNAL_PIHOLE.Network_Addresses AS na ON na.network_id = n.id WHERE n.hwaddr NOT LIKE {s-quote}ip-%{s-quote} AND n.hwaddr <> {s-quote}00:00:00:00:00:00{s-quote};'
PIHOLE_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"SELECT n.hwaddr AS Object_PrimaryID, {s-quote}null{s-quote} AS Object_SecondaryID, datetime() AS DateTime, na.ip  AS Watched_Value1, n.lastQuery AS Watched_Value2, na.name AS Watched_Value3, n.macVendor AS Watched_Value4, {s-quote}null{s-quote} AS Extra, n.hwaddr AS ForeignKey FROM EXTERNAL_PIHOLE.Network AS n LEFT JOIN EXTERNAL_PIHOLE.Network_Addresses AS na ON na.network_id = n.id WHERE n.hwaddr NOT LIKE {s-quote}ip-%{s-quote} AND n.hwaddr <> {s-quote}00:00:00:00:00:00{s-quote};\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SQL to run\"}, {\"language_code\": \"es_es\", \"string\": \"Consulta SQL\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"This SQL query is used to populate the coresponding UI tables under the Plugins section. This particular one selects data from a mapped PiHole SQLite database and maps it to the corresponding Plugin columns.\"}, {\"language_code\": \"es_es\", \"string\": \"Esta consulta SQL se usa para completar las tablas de IU correspondientes en la secci\\u00f3n Complementos. Este en particular selecciona datos de una base de datos PiHole SQLite asignada y los asigna a las columnas correspondientes del complemento.\"}]}"
PIHOLE_DB_PATH='/etc/pihole/pihole-FTL.db'
PIHOLE_DB_PATH__metadata="{\"function\": \"DB_PATH\", \"type\": \"readonly\", \"default_value\": \"/etc/pihole/pihole-FTL.db\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"DB Path\"}, {\"language_code\": \"es_es\", \"string\": \"Ruta de la base de datos\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Required setting for the <code>sqlite-db-query</code> plugin type. Is used to mount an external SQLite database and execute the SQL query stored in the <code>CMD</code> setting.\"}, {\"language_code\": \"es_es\", \"string\": \"Configuraci\\u00f3n requerida para el tipo de complemento <code>sqlite-db-query</code>. Se utiliza para montar una base de datos SQLite externa y ejecutar la consulta SQL almacenada en la configuraci\\u00f3n <code>CMD</code>.\"}]}"
PIHOLE_RUN_SCHD='*/30 * * * *'
PIHOLE_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"*/30 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Programar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#ARPSCAN_RUN\\\"><code>ARPSCAN_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>*/30 * * * *</code> will run the scan every 30 minutes. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#ARPSCAN_RUN\\\"><code>ARPSCAN_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>*/30 * * * *</code> ejecutar\\u00e1 el escaneo cada 30 minutos. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo. <br/> Se recomienda utilizar el mismo intervalo de programaci\\u00f3n para todos los complementos que analizan su red.\"}]}"
PIHOLE_WATCH=['Watched_Value1','Watched_Value2']
PIHOLE_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\", \"Watched_Value2\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is IP</li><li><code>Watched_Value2</code> is Last Query</li><li><code>Watched_Value3</code> is Name </li><li><code>Watched_Value4</code> is N/A </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es IP</li><li><code>Watched_Value2</code> es Proveedor</li><li><code>Watched_Value3</code> is es Interfaz</li><li><code>Watched_Value4</code> es N/A</li></ul>\"}]}"
PIHOLE_REPORT_ON=['new']
PIHOLE_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When should notification be sent out.\"}, {\"language_code\": \"es_es\", \"string\": \"\\u00bfCu\\u00e1ndo se debe enviar la notificaci\\u00f3n?.\"}]}"

# UNDIS
#---------------------------
UNDIS_RUN='disabled'
UNDIS_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"always_after_scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecuta\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When enabled, ONCE is the preferred option. It runs at startup and after every save of the config here.<br> Changes will only show in the devices <b> after the next scan!</b>\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando est\\u00e1 habilitado, ONCE es la opci\\u00f3n preferida. Se ejecuta al inicio y despu\\u00e9s de cada guardado de la configuraci\\u00f3n aqu\\u00ed.<br> \\u00a1Los cambios solo se mostrar\\u00e1n en los dispositivos <b> despu\\u00e9s del pr\\u00f3ximo escaneo!</b>\"}]}"
UNDIS_CMD='python3 /home/pi/pialert/front/plugins/undiscoverables/script.py devices={devices}'
UNDIS_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/undiscoverables/script.py devices={devices}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}]}"
UNDIS_RUN_TIMEOUT=10
UNDIS_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 10, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}]}"
UNDIS_WATCH='[]'
UNDIS_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"readonly\", \"default_value\": [], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Undiscoverable Devices can not change their status, no watch is enabled.\"}, {\"language_code\": \"es_es\", \"string\": \"Los dispositivos no detectables no pueden cambiar su estado, ning\\u00fan reloj est\\u00e1 habilitado.\"}]}"
UNDIS_REPORT_ON='[]'
UNDIS_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"readonly\", \"default_value\": [], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"No notifications will be sent.\"}, {\"language_code\": \"es_es\", \"string\": \"No se enviar\\u00e1n notificaciones.\"}]}"
UNDIS_devices_to_import=['dummy_router']
UNDIS_devices_to_import__metadata="{\"function\": \"devices_to_import\", \"type\": \"list\", \"default_value\": [\"dummy_router\"], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"UnDiscoverable Devices\"}, {\"language_code\": \"es_es\", \"string\": \"Dispositivo no detectable\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Devices to be added to the devices list.\"}, {\"language_code\": \"es_es\", \"string\": \"Dispositivos que se a\\u00f1adir\\u00e1n a la lista de dispositivos.\"}]}"

# UNFIMP
#---------------------------
UNFIMP_RUN='disabled'
UNFIMP_RUN__metadata="{\"default_value\": \"disabled\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable import of devices from a UNIFI controller. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite la importaci\\u00f3n de dispositivos desde un controlador UNIFI. Si selecciona <code>schedule</code>, se aplican las configuraciones de programaci\\u00f3n de abajo. Si selecciona <code>once</code>, el an\\u00e1lisis se ejecuta solo una vez al iniciar la aplicaci\\u00f3n (contenedor) o despu\\u00e9s de actualizar su configuraci\\u00f3n.\"}, {\"language_code\": \"de_de\", \"string\": \"Aktiviere den Import von einem UNIFI controller. Bei <code>schedule</code> werden die Richtzeiten von weiter unten verwendet. Bei der Auswahl <code>once</code> der Import wird einmalig beim Start der Applikation (container), oder nach einem Update der Einstellungen durchgef\\u00fchrt.\"}], \"function\": \"RUN\", \"events\": [\"run\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Ausf\\u00fchrungszeitpunkt\"}], \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"type\": \"text.select\"}"
UNFIMP_CMD='python3 /home/pi/pialert/front/plugins/unifi_import/script.py username={username} password={password}  host={host} sites={sites}  protocol={protocol} port={port} version={version}'
UNFIMP_CMD__metadata="{\"default_value\": \"python3 /home/pi/pialert/front/plugins/unifi_import/script.py username={username} password={password}  host={host} sites={sites} port={port} verifyssl={verifyssl} version={version} fullimport={fullimport}\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. Not recommended to change.\"}, {\"language_code\": \"es_es\", \"string\": \"Comando para ejecutar. No se recomienda cambiar.\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl der ausgef\\u00fchrt wird. Anpassung nicht empfohlen\"}], \"function\": \"CMD\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"options\": [], \"type\": \"text\"}"
UNFIMP_username=''
UNFIMP_username__metadata="{\"default_value\": \"\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"The username used to login into your UNIFI controller. It is recommended to create a read-only user account.\"}, {\"language_code\": \"es_es\", \"string\": \"El nombre de usuario utilizado para iniciar sesi\\u00f3n en su controlador UNIFI. Se recomienda crear una cuenta de usuario de s\\u00f3lo lectura.\"}], \"function\": \"username\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Username\"}, {\"language_code\": \"es_es\", \"string\": \"Nombre de usuario\"}], \"options\": [], \"type\": \"text\"}"
UNFIMP_password=''
UNFIMP_password__metadata="{\"default_value\": \"\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"The password used to login into your UNIFI controller.\"}, {\"language_code\": \"es_es\", \"string\": \"La contrase\\u00f1a utilizada para iniciar sesi\\u00f3n en su controlador UNIFI.\"}], \"function\": \"password\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Password\"}, {\"language_code\": \"es_es\", \"string\": \"Contrase\\u00f1a\"}], \"options\": [], \"type\": \"password\"}"
UNFIMP_host='192.168.1.1'
UNFIMP_host__metadata="{\"default_value\": \"192.168.1.1\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"The host (IP) where the UNIFI controller is runnig. Do NOT include the protocol (e.g. <code>https://</code>)\"}, {\"language_code\": \"es_es\", \"string\": \"El host (IP) donde se ejecuta el controlador UNIFI. NO incluya el protocolo (por ejemplo, <code>https://</code>)\"}], \"function\": \"host\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Host\"}, {\"language_code\": \"es_es\", \"string\": \"Host\"}], \"options\": [], \"type\": \"text\"}"
UNFIMP_port='8443'
UNFIMP_port__metadata="{\"default_value\": \"8443\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"The port number where the UNIFI controller is runnig. Usually it is <code>8443</code>, for UDM(P) devices its 443.\"}, {\"language_code\": \"es_es\", \"string\": \"El n\\u00famero de puerto donde se ejecuta el controlador UNIFI. Normalmente es <code>8443</code>.\"}], \"function\": \"port\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Port number\"}, {\"language_code\": \"es_es\", \"string\": \"N\\u00famero de puerto\"}], \"options\": [], \"type\": \"text\"}"
UNFIMP_verifyssl='false'
UNFIMP_verifyssl__metadata="{\"default_value\": \"false\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"verify SSL certificate validity <code>true|false</code>.\"}, {\"language_code\": \"es_es\", \"string\": \"verificar la validez del certificado SSL <code>true|false</code>.\"}], \"function\": \"verifyssl\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"verify SSL\"}, {\"language_code\": \"es_es\", \"string\": \"verificar SSL\"}], \"options\": [\"true\", \"false\"], \"type\": \"text.select\"}"
UNFIMP_version=''
UNFIMP_version__metadata="{\"function\": \"version\", \"type\": \"text\", \"default_value\": \"v4\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"API version\"}, {\"language_code\": \"es_es\", \"string\": \"Versi\\u00f3n API\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The base version of the Unify controller API. Supported values as of time of writing are <code>v4|v5|unifiOS|UDMP-unifiOS</code>.\"}, {\"language_code\": \"es_es\", \"string\": \"La versi\\u00f3n base de la API del controlador Unify. Los valores admitidos al momento de escribir este art\\u00edculo son <code>v4|v5|unifiOS|UDMP-unifiOS</code>.\"}]}"
UNFIMP_sites=['default']
UNFIMP_sites__metadata="{\"default_value\": [\"default\"], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The sites you want to connect to. Usually it is only one and the name is <code>default</code>. Check the URL in your UniFi controller UI if unsure.\"}, {\"language_code\": \"es_es\", \"string\": \"Los sitios a los que desea conectarse. Generalmente es solo uno y el nombre es <code>default</code>. Verifique la URL en la interfaz de usuario de su controlador UniFi si no est\\u00e1 seguro.\"}], \"function\": \"sites\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"UNIFI sites\"}, {\"language_code\": \"es_es\", \"string\": \"Sitios UNIFI\"}], \"options\": [], \"type\": \"list\"}"
UNFIMP_RUN_SCHD='0 2 * * *'
UNFIMP_RUN_SCHD__metadata="{\"default_value\": \"0 2 * * *\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#UNFIMP_RUN\\\"><code>UNFIMP_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices. \"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#UNFIMP_RUN\\\"><code>UNFIMP_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}], \"function\": \"RUN_SCHD\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"options\": [], \"type\": \"text\"}"
UNFIMP_RUN_TIMEOUT=5
UNFIMP_RUN_TIMEOUT__metadata="{\"default_value\": 5, \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Laufzeit des Scripts. Nach Ablauf der Zeit wird das Script abgebrochen.\"}], \"function\": \"RUN_TIMEOUT\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Wartezeit\"}], \"options\": [], \"type\": \"integer\"}"
UNFIMP_WATCH=['Watched_Value1','Watched_Value4']
UNFIMP_WATCH__metadata="{\"default_value\": [\"Watched_Value1\", \"Watched_Value4\"], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Hostname </li><li><code>Watched_Value2</code> is Vendor </li><li><code>Watched_Value3</code> is Type </li><li><code>Watched_Value4</code> is Online </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es el nombre de host </li><li><code>Watched_Value2</code> es el proveedor </li><li><code>Watched_Value3</code> es el tipo </li><li><code>Watched_Value4</code> es Online </li></ul>\"}], \"function\": \"WATCH\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"type\": \"text.multiselect\"}"
UNFIMP_REPORT_ON=['new','watched-changed']
UNFIMP_REPORT_ON__metadata="{\"default_value\": [\"new\", \"watched-changed\"], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}], \"function\": \"REPORT_ON\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"type\": \"text.multiselect\"}"
UNFIMP_fullimport='disabled'
UNFIMP_fullimport__metadata="{\"default_value\": \"disabled\", \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable a full import of all known devices by the controller instead of only the online ones. During the scan, all found devices appear online. If you select <code>once</code> the full import is only performed once and the status is set to <code>done</code> afterwards.\"}, {\"language_code\": \"es_es\", \"string\": \"Translation Needed - Enable a full import of all known devices by the controller instead of only the online ones. During the scan, all found devices appear online. If you select <code>once</code> the full import is only performed once and the status is set to <code>done</code> afterwards.\"}, {\"language_code\": \"de_de\", \"string\": \"F\\u00fchre einen kompletten Import aller dem Controller bekannten Ger\\u00e4ten durch. W\\u00e4hrend des Scans werden alle gefundenen Ger\\u00e4te einmalig als Online angezeigt. Bei der Auswahl von <code>once</code> wird der Scan einmalig durchgef\\u00fchrt und der Status anschliessend auf <code>done</code> gesetzt\"}], \"function\": \"fullimport\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Perform full import\"}, {\"language_code\": \"es_es\", \"string\": \"[ES] Perform full import\"}, {\"language_code\": \"de_de\", \"string\": \"Vollst\\u00e4ndigen Import durchf\\u00fchren\"}], \"options\": [\"disabled\", \"once\", \"always\"], \"type\": \"text.select\"}"

# SETPWD
#---------------------------
SETPWD_RUN='disabled'
SETPWD_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"before_config_save\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecuta\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Set to <code>before_config_save</code> and specify password to reset your pasword in <code>SETPWD_password</code>. You can set to <code>disabled</code> once the password is changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Configure en <code>before_config_save</code> y especifique la contrase\\u00f1a para restablecer su contrase\\u00f1a en <code>SETPWD_password</code>. Puede establecer <code>deshabilitado</code> una vez que se cambia la contrase\\u00f1a.\"}]}"
SETPWD_CMD='/home/pi/pialert/back/pialert-cli set_password {password}'
SETPWD_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"/home/pi/pialert/back/pialert-cli set_password {password}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar\"}]}"
SETPWD_password='123456'
SETPWD_password__metadata="{\"function\": \"password\", \"type\": \"password\", \"maxLength\": 50, \"default_value\": \"123456\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Password\"}, {\"language_code\": \"es_es\", \"string\": \"Contrase\\u00f1a\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The default password is <code>123456</code>. To change the password run <code>/home/pi/pialert/back/pialert-cli set_password {password}</code> in the container\"}, {\"language_code\": \"es_es\", \"string\": \"La contrase\\u00f1a predeterminada es <code>123456</code>. Para cambiar la contrase\\u00f1a, ejecute <code>/home/pi/pialert/back/pialert-cli set_password {password}</code> en el contenedor\"}]}"

# DBCLNP
#---------------------------
DBCLNP_RUN='schedule'
DBCLNP_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the cleanup should be performed. An hourly or daily <code>SCHEDULE</code> is a good option.\"}]}"
DBCLNP_CMD='python3 /home/pi/pialert/front/plugins/db_cleanup/script.py pluginskeephistory={pluginskeephistory} hourstokeepnewdevice={hourstokeepnewdevice} daystokeepevents={daystokeepevents} pholuskeepdays={pholuskeepdays}'
DBCLNP_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/db_cleanup/script.py pluginskeephistory={pluginskeephistory} hourstokeepnewdevice={hourstokeepnewdevice} daystokeepevents={daystokeepevents} pholuskeepdays={pholuskeepdays}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl zum Ausf\\u00fchren. Dies kann nicht ge\\u00e4ndert werden\"}]}"
DBCLNP_RUN_SCHD='*/30 * * * *'
DBCLNP_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"*/30 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}, {\"language_code\": \"de_de\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#DBCLNP_RUN\\\"><code>DBCLNP_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#DBCLNP_RUN\\\"><code>DBCLNP_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\\\"#DBCLNP_RUN\\\"><code>DBCLNP_RUN</code>-Einstellung</a> ausw\\u00e4hlen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-\\u00e4hnlichen Format eingeben (z. B. validieren unter <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ ausgef\\u00fchrt. Code> den Sie oben festgelegt haben</a>. Wird das N\\u00c4CHSTE Mal ausgef\\u00fchrt, wenn die Zeit vergeht.\"}]}"
DBCLNP_RUN_TIMEOUT=30
DBCLNP_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Zeit\\u00fcberschreitung\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei \\u00dcberschreitung dieser Zeit wird das Skript abgebrochen.\"}]}"

# DDNS
#---------------------------
DDNS_RUN='schedule'
DDNS_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. An hourly or daily <code>SCHEDULE</code> is a good option.\"}]}"
DDNS_CMD='python3 /home/pi/pialert/front/plugins/ddns_update/script.py prev_ip={prev_ip}  DDNS_UPDATE_URL={DDNS_UPDATE_URL} DDNS_USER={DDNS_USER} DDNS_PASSWORD={DDNS_PASSWORD} DDNS_DOMAIN={DDNS_DOMAIN} '
DDNS_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/ddns_update/script.py prev_ip={prev_ip}  DDNS_UPDATE_URL={DDNS_UPDATE_URL} DDNS_USER={DDNS_USER} DDNS_PASSWORD={DDNS_PASSWORD} DDNS_DOMAIN={DDNS_DOMAIN} \", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl zum Ausf\\u00fchren. Dies kann nicht ge\\u00e4ndert werden\"}]}"
DDNS_RUN_SCHD='*/5 * * * *'
DDNS_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"*/5 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}, {\"language_code\": \"de_de\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#DDNS_RUN\\\"><code>DDNS_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#DDNS_RUN\\\"><code>DDNS_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\\\"#DDNS_RUN\\\"><code>DDNS_RUN</code>-Einstellung</a> ausw\\u00e4hlen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-\\u00e4hnlichen Format eingeben (z. B. validieren unter <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ ausgef\\u00fchrt. Code> den Sie oben festgelegt haben</a>. Wird das N\\u00c4CHSTE Mal ausgef\\u00fchrt, wenn die Zeit vergeht.\"}]}"
DDNS_RUN_TIMEOUT=30
DDNS_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Zeit\\u00fcberschreitung\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei \\u00dcberschreitung dieser Zeit wird das Skript abgebrochen.\"}]}"
DDNS_DOMAIN='your_domain.freeddns.org'
DDNS_DOMAIN__metadata="{\"function\": \"DOMAIN\", \"type\": \"text\", \"default_value\": \"your_domain.freeddns.org\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"DynDNS domain URL\"}, {\"language_code\": \"es_es\", \"string\": \"URL del dominio DynDNS\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"DynDNS host URL (do not include http:// or https://).\"}, {\"language_code\": \"es_es\", \"string\": \"URL del host DynDNS (no incluya http:// o https://).\"}]}"
DDNS_USER='dynu_user'
DDNS_USER__metadata="{\"function\": \"USER\", \"type\": \"text\", \"default_value\": \"dynu_user\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"DynDNS user\"}, {\"language_code\": \"es_es\", \"string\": \"Usuario de DynDNS\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The username used to login to the DynDNS service (sometimes a full email address).\"}, {\"language_code\": \"es_es\", \"string\": \"El nombre de usuario utilizado para iniciar sesi\\u00f3n en el servicio DynDNS (a veces, una direcci\\u00f3n de correo electr\\u00f3nico completa).\"}]}"
DDNS_PASSWORD='A0000000B0000000C0000000D0000000'
DDNS_PASSWORD__metadata="{\"function\": \"PASSWORD\", \"type\": \"password\", \"default_value\": \"A0000000B0000000C0000000D0000000\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"DynDNS password\"}, {\"language_code\": \"es_es\", \"string\": \"Contrase\\u00f1a de DynDNS\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The DynDNS service access password\"}, {\"language_code\": \"es_es\", \"string\": \"La contrase\\u00f1a de acceso al servicio DynDNS.\"}]}"
DDNS_UPDATE_URL='https://api.dynu.com/nic/update?'
DDNS_UPDATE_URL__metadata="{\"function\": \"UPDATE_URL\", \"type\": \"text\", \"default_value\": \"https://api.dynu.com/nic/update?\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"DynDNS update URL\"}, {\"language_code\": \"es_es\", \"string\": \"URL de actualizaci\\u00f3n de DynDNS\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Update URL starting with <code>http://</code> or <code>https://</code>.\"}, {\"language_code\": \"es_es\", \"string\": \"Actualice la URL que comienza con <code>http://</code> o <code>https://</code>.\"}]}"
DDNS_WATCH=['Watched_Value1']
DDNS_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Previous IP (not recommended)</li><li><code>Watched_Value2</code> unused</li><li><code>Watched_Value3</code> unused </li><li><code>Watched_Value4</code> unused </li></ul>\"}]}"
DDNS_REPORT_ON=['new','watched-changed']
DDNS_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}]}"

# VNDRPDT
#---------------------------
VNDRPDT_RUN='schedule'
VNDRPDT_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. An overnight weekly <code>SCHEDULE</code> is recommended.\"}]}"
VNDRPDT_CMD='python3 /home/pi/pialert/front/plugins/vendor_update/script.py'
VNDRPDT_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/vendor_update/script.py\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando a ejecutar. Esto no se puede cambiar\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl zum Ausf\\u00fchren. Dies kann nicht ge\\u00e4ndert werden\"}]}"
VNDRPDT_RUN_SCHD='0 4 * * 3'
VNDRPDT_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 4 * * 3\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}, {\"language_code\": \"de_de\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#VNDRPDT_RUN\\\"><code>VNDRPDT_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#VNDRPDT_RUN\\\"><code>VNDRPDT_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\\\"#VNDRPDT_RUN\\\"><code>VNDRPDT_RUN</code>-Einstellung</a> ausw\\u00e4hlen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-\\u00e4hnlichen Format eingeben (z. B. validieren unter <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ ausgef\\u00fchrt. Code> den Sie oben festgelegt haben</a>. Wird das N\\u00c4CHSTE Mal ausgef\\u00fchrt, wenn die Zeit vergeht.\"}]}"
VNDRPDT_RUN_TIMEOUT=600
VNDRPDT_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 600, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Zeit\\u00fcberschreitung\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela.\"}, {\"language_code\": \"de_de\", \"string\": \"Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei \\u00dcberschreitung dieser Zeit wird das Skript abgebrochen.\"}]}"
VNDRPDT_WATCH=['Watched_Value1']
VNDRPDT_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is vendor name</li><li><code>Watched_Value2</code> is device name</li><li><code>Watched_Value3</code> unused </li><li><code>Watched_Value4</code> unused </li></ul>\"}]}"
VNDRPDT_REPORT_ON=['new','watched-changed']
VNDRPDT_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que seleccion\\u00f3 <code>Watched_ValueN Las columnas </code> cambiaron.\"}]}"

# PHOLUS
#---------------------------
PHOLUS_RUN='once'
PHOLUS_RUN__metadata="{\"function\": \"RUN\", \"type\": \"text.select\", \"default_value\": \"schedule\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"events\": [\"run\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cuando ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"<a href=\\\"https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins/pholus_scan/pholus\\\" target=\\\"_blank\\\" >Pholus</a> is a sniffing tool to discover additional information about the devices on the network, including the device name. If enabled this will execute the scan before every network scan cycle until there are no <code>(unknown)</code> or <code>(name not found)</code> devices. Please be aware it can spam the network with unnecessary traffic. Depends on the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</code> setting</a>. For a scheduled or one-off scan, check the <a href=\\\"#PHOLUS_RUN\\\"><code>PHOLUS_RUN</code> setting</a>.Specify when your Name-discovery scan will run. Typical setting would be <code>on_new_device</code> or <code>schedule</code> and then you specify a cron-like schedule in the <a href=\\\"#PHOLUS_RUN_SCHD\\\"><code>PHOLUS_RUN_SCHD</code>setting</a>.\"}, {\"language_code\": \"es_es\", \"string\": \"<a href=\\\"https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins/pholus_scan/pholus\\\" target=\\\"_blank\\\" >Pholus</a> es una herramienta de rastreo para descubrir informaci\\u00f3n adicional sobre los dispositivos en la red, incluido el nombre del dispositivo. Si est\\u00e1 habilitado, ejecutar\\u00e1 el escaneo antes de cada ciclo de escaneo de red hasta que no haya dispositivos <code>(unknown)</code> o <code>(name not found)</code>. Tenga en cuenta que puede enviar spam a la red con tr\\u00e1fico innecesario. Depende de la configuraci\\u00f3n de <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</code></a>. Para un an\\u00e1lisis programado o \\u00fanico, verifique la configuraci\\u00f3n de <a href=\\\"#PHOLUS_RUN\\\"><code>PHOLUS_RUN</code></a>.\"}]}"
PHOLUS_CMD='python3 /home/pi/pialert/front/plugins/pholus_scan/script.py userSubnets={subnets} timeoutSec={timeout}'
PHOLUS_CMD__metadata="{\"function\": \"CMD\", \"type\": \"readonly\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/pholus_scan/script.py userSubnets={subnets} timeoutSec={timeout}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This should not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando para ejecutar. Esto no debe ser cambiado\"}]}"
PHOLUS_RUN_TIMEOUT=600
PHOLUS_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 300, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo l\\u00edmite de ejecuci\\u00f3n\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Network scan time in seconds. Pholus scan will always run this long. The longer it runs the more device names might be resolved. Will be divided by the number of subnets.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo de escaneo de red en segundos. El escaneo de Pholus siempre durar\\u00e1 este tiempo. Cuanto m\\u00e1s tiempo se ejecute, m\\u00e1s nombres de dispositivos se podr\\u00e1n resolver. Se dividir\\u00e1 por el n\\u00famero de subredes.\"}]}"
PHOLUS_RUN_SCHD='0 4 * * *'
PHOLUS_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"30 3 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#PHOLUS_RUN\\\"><code>PHOLUS_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>30 3 * * *</code> will run the scan at 3:30 am. Will be run NEXT time the time passes. <br/>\"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#PHOLUS_RUN\\\"><code>PHOLUS_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato cron correcto (por ejemplo, validar en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, al ingresar <code>30 3 * * *</code> se ejecutar\\u00e1 el escaneo a las 3:30 am. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo. <br/>\"}]}"
PHOLUS_DAYS_DATA=7
PHOLUS_DAYS_DATA__metadata="{\"function\": \"DAYS_DATA\", \"type\": \"integer\", \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Retenci\\u00f3n de datos\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"How many days of Pholus scan entries should be kept (globally, not device specific!) Enter <code>0</code> to disable.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ntos d\\u00edas de entradas de escaneo de Pholus deben conservarse (globalmente, \\u00a1no espec\\u00edfico del dispositivo!). El archivo <a href=\\\"/maintenance.php#tab_Logging\\\">pialert_pholus.log</a> no se modifica. Introduzca <code>0</code> para desactivar.\"}]}"
PHOLUS_WATCH=['Watched_Value1','Watched_Value2']
PHOLUS_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\", \"Watched_Value2\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Watched\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Info</li><li><code>Watched_Value2</code> is Record type</li><li><code>Watched_Value3</code> is Info </li><li><code>Watched_Value4</code> is N/A </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Enviar una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + Clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es Informaci\\u00f3n</li><li><code>Watched_Value2</code> es Tipo de registro</li><li><code>Watched_Value3</code> es La informaci\\u00f3n </li><li><code>Watched_Value4</code> es N/A </li></ul>\"}]}"
PHOLUS_REPORT_ON=['new']
PHOLUS_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When should notification be sent out.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo debe enviarse una notificaci\\u00f3n.\"}]}"

# SNMPDSC
#---------------------------
SNMPDSC_RUN='disabled'
SNMPDSC_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": \"text.select\", \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable import of devices from a SNMP enabled device. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings.\"}, {\"language_code\": \"es_es\", \"string\": \"Habilite la importaci\\u00f3n de dispositivos desde un dispositivo habilitado para SNMP. Si selecciona <code>schedule</code>, se aplican las configuraciones de programaci\\u00f3n de abajo. Si selecciona <code>once</code>, el an\\u00e1lisis se ejecuta solo una vez al inicio de la aplicaci\\u00f3n (contenedor) o despu\\u00e9s de actualizar su configuraci\\u00f3n.\"}]}"
SNMPDSC_CMD='python3 /home/pi/pialert/front/plugins/snmp_discovery/script.py routers={s-quote}{routers}{s-quote}'
SNMPDSC_CMD__metadata="{\"function\": \"CMD\", \"type\": \"text\", \"default_value\": \"python3 /home/pi/pialert/front/plugins/snmp_discovery/script.py routers={s-quote}{routers}{s-quote}\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}, {\"language_code\": \"es_es\", \"string\": \"Comando\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. Not recommended to change.\"}, {\"language_code\": \"es_es\", \"string\": \"Comando para ejecutar. No se recomienda cambiar.\"}]}"
SNMPDSC_routers=['snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2']
SNMPDSC_routers__metadata="{\"function\": \"routers\", \"type\": \"list\", \"default_value\": [\"snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2\"], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Routers\"}, {\"language_code\": \"es_es\", \"string\": \"Routers\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"A list of <code>snmpwalk</code> commands to execute against IP addresses of roputers/switches with SNMP turned on. <br/> <br/> Example with the router on the IP <code>192.168.1.1</code>: <br/> <code>snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2</code> <br/><br/> Only IPv4 supported. Authentication is not supported. More info on the plugin <a href='https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins/snmp_discovery' target='_blank'>here</a>.\"}, {\"language_code\": \"es_es\", \"string\": \"Una lista de comandos <code>snmpwalk</code> para ejecutar en direcciones IP de computadoras/conmutadores con SNMP activado. <br/> <br/> Ejemplo con el enrutador en la IP <code>192.168.1.1</code>: <br/> <code>snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1. 2.1.3.1.1.2</code> <br/><br/> Solo se admite IPv4. No se admite la autenticaci\\u00f3n. M\\u00e1s informaci\\u00f3n sobre el complemento <a href='https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins/snmp_discovery' target='_blank'>aqu\\u00ed</a>.\"}]}"
SNMPDSC_RUN_SCHD='0 2 * * *'
SNMPDSC_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": \"text\", \"default_value\": \"0 2 * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"es_es\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#SNMPDSC_RUN\\\"><code>SNMPDSC_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices. \"}, {\"language_code\": \"es_es\", \"string\": \"Solo est\\u00e1 habilitado si selecciona <code>schedule</code> en la configuraci\\u00f3n <a href=\\\"#SNMPDSC_RUN\\\"><code>SNMPDSC_RUN</code></a>. Aseg\\u00farese de ingresar la programaci\\u00f3n en el formato similar a cron correcto (por ejemplo, valide en <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutar\\u00e1 el escaneo despu\\u00e9s de las 4 a.m. en el <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</ c\\u00f3digo> que configur\\u00f3 arriba</a>. Se ejecutar\\u00e1 la PR\\u00d3XIMA vez que pase el tiempo.\"}]}"
SNMPDSC_RUN_TIMEOUT=5
SNMPDSC_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": \"integer\", \"default_value\": 5, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo de espera de ejecuci\\u00f3n\"}, {\"language_code\": \"de_de\", \"string\": \"Wartezeit\"}], \"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.\"}, {\"language_code\": \"es_es\", \"string\": \"Tiempo m\\u00e1ximo en segundos para esperar a que finalice el script. Si se excede este tiempo, el script se cancela..\"}]}"
SNMPDSC_WATCH=['Watched_Value1']
SNMPDSC_WATCH__metadata="{\"function\": \"WATCH\", \"type\": \"text.multiselect\", \"default_value\": [\"Watched_Value1\"], \"options\": [\"Watched_Value1\", \"Watched_Value2\", \"Watched_Value3\", \"Watched_Value4\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Watched\"}, {\"language_code\": \"es_es\", \"string\": \"Visto\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Hostname (not discoverable) </li><li><code>Watched_Value2</code> is Router IP </li><li><code>Watched_Value3</code> is not used </li><li><code>Watched_Value4</code> is not used </li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n si los valores seleccionados cambian. Utilice <code>CTRL + clic</code> para seleccionar/deseleccionar. <ul> <li><code>Watched_Value1</code> es el nombre de host (no detectable) </li><li><code>Watched_Value2</code> es la IP del enrutador </li><li><code>Watched_Value3< /code> no se utiliza </li><li><code>Watched_Value4</code> no se utiliza </li></ul>\"}]}"
SNMPDSC_REPORT_ON=['new','watched-changed']
SNMPDSC_REPORT_ON__metadata="{\"function\": \"REPORT_ON\", \"type\": \"text.multiselect\", \"default_value\": [\"new\", \"watched-changed\"], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}, {\"language_code\": \"es_es\", \"string\": \"Informar sobre\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed.\"}, {\"language_code\": \"es_es\", \"string\": \"Env\\u00ede una notificaci\\u00f3n solo en estos estados. <code>new</code> significa que se descubri\\u00f3 un nuevo objeto \\u00fanico (una combinaci\\u00f3n \\u00fanica de PrimaryId y SecondaryId). <code>watched-changed</code> significa que las columnas <code>Watched_ValueN</code> seleccionadas cambiaron.\"}]}"
jokob-sk commented 11 months ago

Hi, Thanks for that,

Can you also please post the pialert.log file with debug enabled?

Ideally between the times where PiAlert finds a new device, forgets it and finds it again.

Thanks! j

ameer1234567890 commented 11 months ago

I also noticed this today. My config file says HRS_TO_KEEP_NEWDEV=0

jokob-sk commented 11 months ago

Same request here, @ameer1234567890 , if possible:

Can you also please post the pialert.log file with debug enabled? Ideally between the times where PiAlert finds a new device, forgets it and finds it again.

This might also be related to: https://github.com/jokob-sk/Pi.Alert/issues/474

The issue might also be resolved in the _dev image if someone could give it a go and report back?

jokob-sk commented 10 months ago

Released in 23.11.11 - potentially fixed