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.9k stars 173 forks source link

Devices all seem to be offline - Omada/Arp/NMAP #825

Open thefunkygibbon opened 1 day ago

thefunkygibbon commented 1 day ago

Is there an existing issue for this?

Current Behavior

The only device which are "online" and have been for the last couple of weeks, seems to be "internet" and "my docker host server". It is connected to the host network (nothing has changed here or with any of the config since it was last working other than updating the docker image, still using dev because of the issues with the popup not going away)

Expected Behavior

to see all my devices online like it used to

Steps To Reproduce

look at the dashboard

app.conf

No response

docker-compose.yml

No response

What branch are you running?

Production

app.log

No response

Debug enabled

thefunkygibbon commented 1 day ago

couldn't include logs or config due to github complaining about too many chars (65k?)

app.log

09:40:13 [Plugin utils] ---------------------------------------------
09:40:13 [Plugin utils] display_name: OMADA SDN import
09:40:13 [Plugins] Executing: python3 /app/front/plugins/omada_sdn_imp/omada_sdn.py
09:40:13 [OMDSDN] starting execution
09:40:13 [Database] Opening DB
09:40:13 [OMDSDN] callomada:-t myomada target --url http://192.168.0.2:8042/ --user sdfdsffs --password dfdsfdsf --site Default --set-default
09:40:15 [OMDSDN] login to omada result is: Set target myomada to controller GibWifiController and site Default

09:40:15 [OMDSDN] callomada:-t myomada clients
09:40:17 [OMDSDN] clients found:"46"
44-D5-CC-69-C8-96 192.168.0.136   amazon-tablet-breakfast gibwifi (Lounge AP)
<SNIP> All the devices were here

09:40:17 [OMDSDN] callomada:-t myomada devices
09:40:19 [OMDSDN] omada devices (switches, access points) found:"6" 
  60-A4-B7-ED-BF-B8   192.168.0.178      ap CONNECTED        Office AP            EAP245(EU) v3.0
B0-A7-B9-EA-70-F2   192.168.0.176      ap CONNECTED        Boys AP              EAP245(EU) v3.0
B0-A7-B9-AA-F6-F6   192.168.0.177      ap CONNECTED        Lounge AP            EAP245(EU) v3.0
3C-52-A1-AA-20-7C   192.168.0.175      ap CONNECTED        Conservatory AP      EAP110(EU) v4.0
5C-A6-E6-AA-C5-7A   192.168.0.171  switch CONNECTED        GibSwitch            SG2218 v1.20
78-8C-B5-AA-00-CB   192.168.0.172  switch CONNECTED        GibOfficeSwitch      SG2008 v4.20

09:40:24 [OMDSDN] switches details collected "6"
09:40:24 [OMDSDN] dump details collected "6"
09:40:29 [plugin_helper] reading config file
09:40:13 [OMDSDN] starting execution
09:40:13 [Database] Opening DB
09:40:13 [OMDSDN] callomada:-t myomada target --url http://192.168.0.2:8042/ --user dfgdfgdfg --password dffgfdgdfgdg --site Default --set-default
09:40:15 [OMDSDN] login to omada result is: Set target myomada to controller GibWifiController and site Default

09:40:15 [OMDSDN] callomada:-t myomada clients
09:40:17 [OMDSDN] clients found:"46"
44-D5-CC-69-C8-96 192.168.0.136   amazon-tablet-breakfast gibwifi (Lounge AP)
<SNIP> All the devices were here

09:40:17 [OMDSDN] callomada:-t myomada devices
09:40:19 [OMDSDN] omada devices (switches, access points) found:"6" 
  60-A4-B7-AA-BF-B8   192.168.0.178      ap CONNECTED        Office AP            EAP245(EU) v3.0
B0-A7-B9-AA-70-F2   192.168.0.176      ap CONNECTED        Boys AP              EAP245(EU) v3.0
B0-A7-B9-AA-F6-F6   192.168.0.177      ap CONNECTED        Lounge AP            EAP245(EU) v3.0
3C-52-A1-AA-20-7C   192.168.0.175      ap CONNECTED        Conservatory AP      EAP110(EU) v4.0
5C-A6-E6-AA-C5-7A   192.168.0.171  switch CONNECTED        GibSwitch            SG2218 v1.20
78-8C-B5-AA-00-CB   192.168.0.172  switch CONNECTED        GibOfficeSwitch      SG2008 v4.20

09:40:24 [OMDSDN] switches details collected "6"
09:40:24 [OMDSDN] dump details collected "6"
Traceback (most recent call last):
  File "/app/front/plugins/omada_sdn_imp/omada_sdn.py", line 517, in <module>
    main()
  File "/app/front/plugins/omada_sdn_imp/omada_sdn.py", line 217, in main
    device_data = get_device_data(clients_list, switches_and_aps, device_handler)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/front/plugins/omada_sdn_imp/omada_sdn.py", line 501, in get_device_data
    default_router_mac = ietf2ieee_mac_formater(get_mac_from_IP(default_router_ip))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/front/plugins/omada_sdn_imp/omada_sdn.py", line 95, in ietf2ieee_mac_formater
    return(inputmac.upper().replace(':','-'))
           ^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'upper'

09:40:29 [Plugins] ⚠ ERROR - enable LOG_LEVEL=debug and check logs
09:40:29 [Plugins] No output received from the plugin "OMDSDN"
09:40:29 [Plugin utils] ---------------------------------------------
09:40:29 [Plugin utils] display_name: Arp-Scan (Network scan)
09:40:29 [Plugins] Executing: python3 /app/front/plugins/arp_scan/script.py userSubnets={subnets}
09:40:30 [ARP Scan] In script 
09:40:30 [ARP Scan] userSubnetsParam: 192.168.1.0/24 --interface=eth1
09:40:30 [Database] Opening DB
09:40:30 [ARP Scan] arpscan_output: 
09:40:30 [ARP Scan] Found: Devices without duplicates 0
09:40:30 Devices List len:0
09:40:30 Devices List:[]
09:40:30 [Plugins] No output received from the plugin "ARPSCAN"
09:40:30 [Plugin utils] ---------------------------------------------
09:40:30 [Plugin utils] display_name: Internet-Check
09:40:30 [Plugins] Executing: python3 /app/front/plugins/internet_ip/script.py prev_ip={prev_ip} INTRNT_DIG_GET_IP_ARG={INTRNT_DIG_GET_IP_ARG}
09:40:30 [INTRNT] In script
09:40:30 [INTRNT] INTRNT_DIG_GET_IP_ARG: -4 myip.opendns.com @resolver1.opendns.com
09:40:30 [INTRNT] - Retrieving Internet IP
09:40:30 [INTRNT]  DIG result : 86.10.x.x

09:40:30 [INTRNT]  Current internet_IP : 86.10.x.x
09:40:30 [INTRNT]          previous_IP : 86.10.x.x
09:40:30 [INTRNT] Finished 
09:40:31 [Plugins] SUCCESS, received 1 entries
09:40:31 [API] Updating table_appevents.json file in /front/api
09:40:31 [API] Updating table_plugins_history.json file in /front/api
09:40:31 [Process Scan]  Processing scan results
09:40:31 [Process Scan] Print Stats
09:40:31 [Scan Stats] Devices Detected.......: 2
09:40:31 [Scan Stats] New Devices............: 0
09:40:31 [Scan Stats] Down Alerts............: 0
09:40:31 [Scan Stats] New Down Alerts........: 0
09:40:31 [Scan Stats] New Connections........: 74
09:40:31 [Scan Stats] Disconnections.........: 0
09:40:31 [Scan Stats] IP Changes.............: 0
09:40:31 [Scan Stats] Scan Method Statistics:
09:40:31     INTRNT: 1
09:40:31     local_MAC: 1
09:40:31 [Process Scan] Stats end
09:40:31 [Process Scan] Sessions Events (connect / discconnect)
09:40:32 [Process Scan] Creating new devices
09:40:33 [Process Scan] Updating Devices Info
09:40:33 [Process Scan] Voiding false (ghost) disconnections
09:40:33 [Process Scan] Pairing session events (connection / disconnection) 
09:40:33 [Process Scan] Creating sessions snapshot
09:40:35 [Process Scan] Inserting scan results into Online_History
09:40:35 [Process Scan] Skipping repeated notifications
09:40:35 [Skip Repeated Notifications] Skip Repeated
09:40:35 [Plugin utils] ---------------------------------------------
09:40:35 [Plugin utils] display_name: AVAHISCAN (Name discovery)
09:40:35 [Plugins] Executing: python3 /app/front/plugins/avahi_scan/avahi_scan.py
09:40:35 [AVAHISCAN] In script
09:40:35 [Database] Opening DB
09:40:35 [AVAHISCAN] Unknown devices count: 0
09:40:35 [AVAHISCAN] Script finished
09:40:35 [Plugins] No output received from the plugin "AVAHISCAN"
09:40:35 [Plugin utils] ---------------------------------------------
09:40:35 [Plugin utils] display_name: NSLOOKUP (Name discovery)
09:40:35 [Plugins] Executing: python3 /app/front/plugins/nslookup_scan/nslookup.py
09:40:36 [NSLOOKUP] In script
09:40:36 [Database] Opening DB
09:40:36 [NSLOOKUP] Unknown devices count: 0
09:40:36 [NSLOOKUP] Script finished
09:40:36 [Plugins] No output received from the plugin "NSLOOKUP"
09:40:36 [Notification] Check if something to report
09:40:36 [Notification] Included sections: ['new_devices', 'down_devices', 'events']
09:40:36 [Notification] No changes to report
09:40:36 [MAIN] Process: Wait
thefunkygibbon commented 1 day ago

config


#-----------------AUTOGENERATED FILE-----------------#
#                                                    #
#         Generated:  2024-09-23_10-28-26            #
#                                                    #
#   Config file for the LAN intruder detection app:  #
#      https://github.com/jokob-sk/NetAlertX         #
#                                                    #
#-----------------AUTOGENERATED FILE-----------------#

# General
#---------------------------
LOADED_PLUGINS=['ARPSCAN','CSVBCKP','DBCLNP','INTRNT','MAINT','NEWDEV','NMAP','NSLOOKUP','NTFPRCS','OMDSDN','PHOLUS','PIHOLE','SETPWD','SMTP','SYNC','VNDRPDT','WORKFLOWS','NMAPDEV']
LOADED_PLUGINS__metadata="                      {}\n                    "
SCAN_SUBNETS=['192.168.1.0/24 --interface=eth1']
SCAN_SUBNETS__metadata="                      {}\n                    "
LOG_LEVEL='verbose'
LOG_LEVEL__metadata="                      {}\n                    "
TIMEZONE='Europe/London'
TIMEZONE__metadata="                      {}\n                    "
PLUGINS_KEEP_HIST=250
PLUGINS_KEEP_HIST__metadata="                      {}\n                    "
REPORT_DASHBOARD_URL='http://netalertx'
REPORT_DASHBOARD_URL__metadata="                      {}\n                    "
DAYS_TO_KEEP_EVENTS=90
DAYS_TO_KEEP_EVENTS__metadata="                      {}\n                    "
HRS_TO_KEEP_NEWDEV=0
HRS_TO_KEEP_NEWDEV__metadata="                      {}\n                    "
CLEAR_NEW_FLAG=168
CLEAR_NEW_FLAG__metadata="                      {}\n                    "
API_CUSTOM_SQL='SELECT * FROM Devices WHERE dev_PresentLastScan = 0'
API_CUSTOM_SQL__metadata="                      {}\n                    "
VERSION='1727060493'
VERSION__metadata="                      {}\n                    "
NETWORK_DEVICE_TYPES=['AP','Gateway','Firewall','Hypervisor','Powerline','Switch','WLAN','PLC','Router','USB LAN Adapter','USB WIFI Adapter','Internet']
NETWORK_DEVICE_TYPES__metadata="                      {}\n                    "

# UI
#---------------------------
UI_LANG='English'
UI_LANG__metadata="                      {}\n                    "
UI_NOT_RANDOM_MAC=[]
UI_NOT_RANDOM_MAC__metadata="                      {\"function\": \"NOT_RANDOM_MAC\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this,false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [], \"options\": [], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_ICONS=['PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k+','PGkgY2xhc3M9ImZhIGZhLWV0aGVybmV0Ij48L2k+','PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4','PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k+','PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==','PGkgY2xhc3M9ImZhIGZhLWxpZ2h0YnVsYiI+PC9pPg==','PGkgY2xhc3M9ImZhIGZhLXNoaWVsZCI+PC9pPg==','PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4']
UI_ICONS__metadata="                      {\"function\": \"ICONS\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this,false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [\"PGkgY2xhc3M9J2ZhIGZhLXdpZmknPjwvaT4=\", \"PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k+\", \"PGkgY2xhc3M9ImZhIGZhLWV0aGVybmV0Ij48L2k+\", \"PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4=\", \"PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k+\", \"PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==\", \"PGkgY2xhc3M9ImZhIGZhLWxpZ2h0YnVsYiI+PC9pPg==\", \"PGkgY2xhc3M9ImZhIGZhLXNoaWVsZCI+PC9pPg==\", \"PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4=\", \"PGkgY2xhc3M9J2ZhIGZhLWdhbWVwYWQnPjwvaT4\"], \"options\": [], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_REFRESH=0
UI_REFRESH__metadata="                      {\"function\": \"REFRESH\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": 0, \"options\": [], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_DEV_SECTIONS=[]
UI_DEV_SECTIONS__metadata="                      {\"function\": \"DEV_SECTIONS\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [], \"options\": [\"Tile Cards\", \"Device Presence\"], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_PRESENCE=['online','offline','archived']
UI_PRESENCE__metadata="                      {\"function\": \"PRESENCE\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [\"online\", \"offline\", \"archived\"], \"options\": [\"online\", \"offline\", \"archived\"], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_MY_DEVICES=['online','offline','archived','new','down']
UI_MY_DEVICES__metadata="                      {\"function\": \"MY_DEVICES\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [\"online\", \"offline\", \"archived\", \"new\", \"down\"], \"options\": [\"online\", \"offline\", \"archived\", \"new\", \"down\"], \"localized\": [], \"name\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}], \"description\": [{\"string\": \"_GLOBAL_LANG_FILES_\"}]}\n                    "
UI_device_columns=['Device_TableHead_Icon','Device_TableHead_Name','Device_TableHead_Type','Device_TableHead_LastIP','Device_TableHead_Status','Device_TableHead_MAC_full']
UI_device_columns__metadata="                      {\"function\": \"device_columns\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\", \"ordeable\": \"true\"}], \"transformers\": [\"getString\"]}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-4\"}, {\"onClick\": \"selectAll(this)\"}, {\"getStringKey\": \"Gen_Add_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-4\"}, {\"onClick\": \"unselectAll(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-4\"}, {\"onClick\": \"selectChange(this)\"}, {\"getStringKey\": \"Gen_Change\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [\"Device_TableHead_Icon\", \"Device_TableHead_Name\", \"Device_TableHead_Type\", \"Device_TableHead_LastIP\", \"Device_TableHead_Status\", \"Device_TableHead_MAC_full\"], \"options\": [\"Device_TableHead_Name\", \"Device_TableHead_Owner\", \"Device_TableHead_Type\", \"Device_TableHead_Icon\", \"Device_TableHead_Favorite\", \"Device_TableHead_Group\", \"Device_TableHead_FirstSession\", \"Device_TableHead_LastSession\", \"Device_TableHead_LastIP\", \"Device_TableHead_MAC\", \"Device_TableHead_Status\", \"Device_TableHead_MAC_full\", \"Device_TableHead_LastIPOrder\", \"Device_TableHead_Rowid\", \"Device_TableHead_Parent_MAC\", \"Device_TableHead_Connected_Devices\", \"Device_TableHead_Location\", \"Device_TableHead_Vendor\", \"Device_TableHead_Port\", \"Device_TableHead_GUID\", \"Device_TableHead_SyncHubNodeName\", \"Device_TableHead_NetworkSite\", \"Device_TableHead_SSID\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Columns\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Columns and their order that are shown on the Devices page. Drag and drop the order of columns, click <code>x</code> to remove columns. You can also click into the field to selectivelly add fields.\"}]}\n                    "
UI_shown_cards=['my_devices','connected','favorites','new','down','archived']
UI_shown_cards__metadata="                      {\"function\": \"shown_cards\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [\"my_devices\", \"connected\", \"favorites\", \"new\", \"down\", \"archived\"], \"options\": [\"my_devices\", \"connected\", \"favorites\", \"new\", \"down\", \"archived\", \"offline\", \"all\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Tiles to Show\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Which tiles to show on the top of the Devices page.\"}]}\n                    "
UI_hide_empty=False
UI_hide_empty__metadata="                      {\"function\": \"hide_empty\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Hide empty tiles\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Hide Device tiles with zero results.\"}]}\n                    "
UI_dark_mode=False
UI_dark_mode__metadata="                      {\"function\": \"dark_mode\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Dark mode\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enable dark mode.\"}]}\n                    "

# OMDSDN
#---------------------------
OMDSDN_RUN='schedule'
OMDSDN_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"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 scan should run. Good options are: <code>schedule</code>\"}]}\n                    "
OMDSDN_RUN_SCHD='*/5 * * * *'
OMDSDN_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"*/5 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#SYNC_RUN\\\"><code>SYNC_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=\\\"#SYNC_RUN\\\"><code>SYNC_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=\\\"#SYNC_RUN\\\"><code>SYNC_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.\"}]}\n                    "
OMDSDN_url='http://192.168.0.2:8042/'
OMDSDN_url__metadata="                      {\"function\": \"url\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"URL\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Enter full URL with protocol <code>https://CHANGEME_omada.mylocaldomain:PORT</code>.\"}]}\n                    "
OMDSDN_sites=['Default']
OMDSDN_sites__metadata="                      {\"function\": \"sites\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this, false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"default_value\": [], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"OMADA sites\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Omada SDN site IDs. For now, we only process the first site listed since NetAlertX's other probes won't traverse across NAT and routers. But if needed please submit an issue in github with your specific use case for consideration:  <code>https://github.com/jokob-sk/NetAlertX/issues </code> \"}]}\n                    "
OMDSDN_username='gibbon'
OMDSDN_username__metadata="                      {\"function\": \"username\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"User name\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Omada SDN instance user name.\"}]}\n                    "
OMDSDN_password='dfdsfdsfds'
OMDSDN_password__metadata="                      {\"function\": \"password\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"password\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Password\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Omada SDN instance password.\"}]}\n                    "
OMDSDN_force_overwrite=False
OMDSDN_force_overwrite__metadata="                      {\"function\": \"force_overwrite\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Force overwrite\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The plugin synchronizes names from NetAlertX to OMADA Clients. By default NetAlertX will only populate missing names in OMADASDN devices (i.e.: where the name is defaulting to the device MAC address); with this setting toggled, it will overwrite existing values regardless.\"}]}\n                    "
OMDSDN_CMD='python3 /app/front/plugins/omada_sdn_imp/omada_sdn.py'
OMDSDN_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/omada_sdn_imp/omada_sdn.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\"}]}\n                    "
OMDSDN_RUN_TIMEOUT=90
OMDSDN_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
OMDSDN_WATCH=['Watched_Value1','Watched_Value2']
OMDSDN_WATCH__metadata="                      {\"default_value\": [], \"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 Parent Node </li><li><code>Watched_Value3</code> is Port </li><li><code>Watched_Value4</code> is SSID </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\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}}\n                    "
OMDSDN_REPORT_ON=['new','watched-changed']
OMDSDN_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.\"}], \"function\": \"REPORT_ON\", \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Report on\"}], \"options\": [\"new\", \"watched-changed\", \"watched-not-changed\", \"missing-in-last-scan\"], \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}}\n                    "

# ARPSCAN
#---------------------------
ARPSCAN_RUN='schedule'
ARPSCAN_RUN__metadata="                      {\"function\": \"RUN\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Wann ausf\\u00fchren\"}], \"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>. \\u26a0 Use the same schedule if you have multiple <i class=\\\"fa-solid fa-magnifying-glass-plus\\\"></i> Device scanners enabled. <br/><br/> Depends on the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</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> \"}, {\"language_code\": \"de_de\", \"string\": \"Ausw\\u00e4hlen wann der Netzwerkscan laufen soll. Typischerweise wird <code>schedule</code> ausgew\\u00e4hlt und ein cron-Intervall in der <a href=\\\"#ARPSCAN_RUN_SCHD\\\"><code>ARPSCAN_RUN_SCHD</code>Einstellung</a> gesetzt.\"}]}\n                    "
ARPSCAN_CMD='python3 /app/front/plugins/arp_scan/script.py userSubnets={subnets}'
ARPSCAN_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/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\"}, {\"language_code\": \"de_de\", \"string\": \"Befehl\"}], \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Auszuf\\u00fchrender Befehl. Dieser sollte nicht ge\\u00e4ndert werden\"}]}\n                    "
ARPSCAN_RUN_TIMEOUT=300
ARPSCAN_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Zeitlimit\"}], \"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.\"}, {\"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.\"}]}\n                    "
ARPSCAN_RUN_SCHD='*/5 * * * *'
ARPSCAN_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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\": \"Zeitplan\"}], \"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.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiv, wenn <code>schedule</code> in der <a href=\\\"#ARPSCAN_RUN\\\"><code>ARPSCAN_RUN</code> Einstellung</a> ausgew\\u00e4hlt wurde. Sichergehen, dass das Intervall in einem korrekten cron-\\u00e4hnlichen Format angegeben wurde (z.B. auf <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a> testen). <code>*/3 * * * *</code> w\\u00fcrde den Scan alle 3 Minuten starten. Wird erst beim N\\u00c4CHSTEN Intervall ausgef\\u00fchrt. <br/>Es wird empfohlen, das Intervall aller Plugins, welche nach neuen Ger\\u00e4ten suchen, auf den gleichen Wert zu setzen.\"}]}\n                    "
ARPSCAN_WATCH=['Watched_Value1','Watched_Value2']
ARPSCAN_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"\\u00dcberwacht\"}], \"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>\"}, {\"language_code\": \"de_de\", \"string\": \"Sende eine Benachrichtigung, wenn ein ausgw\\u00e4hlter Wert sich \\u00e4ndert. <code>STRG + klicken</code> zum aus-/abw\\u00e4hlen. <ul> <li><code>Watched_Value1</code> ist die IP</li><li><code>Watched_Value2</code> ist der Hersteller</li><li><code>Watched_Value3</code> ist das Interface </li><li><code>Watched_Value4</code> ist nicht in Verwendung </li></ul>\"}]}\n                    "
ARPSCAN_REPORT_ON=['new']
ARPSCAN_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige wenn\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When should notification be sent out.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo debe enviarse una notificaci\\u00f3n.\"}, {\"language_code\": \"de_de\", \"string\": \"Wann Benachrichtigungen gesendet werden sollen.\"}]}\n                    "
ARPSCAN_ARGS='sudo arp-scan --ignoredups --retry=6'
ARPSCAN_ARGS__metadata="                      {\"function\": \"ARGS\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"sudo arp-scan --ignoredups --retry=6\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Arguments\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Arguments to run arps-scan with. Recommended and tested only with the setting: <br/> <code>sudo arp-scan --ignoredups --retry=6</code>.\"}]}\n                    "

# PIHOLE
#---------------------------
PIHOLE_RUN='disabled'
PIHOLE_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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 database 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. \\u26a0 Use the same schedule if you have multiple <i class=\\\"fa-solid fa-magnifying-glass-plus\\\"></i> Device scanners enabled.\"}, {\"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>.\"}]}\n                    "
PIHOLE_CMD_OLD='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 is not {s-quote}00:00:00:00:00:00{s-quote}  AND na.ip is not null'
PIHOLE_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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 is not {s-quote}00:00:00:00:00:00{s-quote}  AND na.ip is not null\", \"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.\"}]}\n                    "
PIHOLE_DB_PATH='/etc/pihole/pihole-FTL.db'
PIHOLE_DB_PATH__metadata="                      {\"function\": \"DB_PATH\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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>.\"}]}\n                    "
PIHOLE_RUN_SCHD='*/10 * * * *'
PIHOLE_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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=\\\"#PIHOLE_RUN\\\"><code>PIHOLE_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=\\\"#PIHOLE_RUN\\\"><code>PIHOLE_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.\"}]}\n                    "
PIHOLE_WATCH=['Watched_Value1','Watched_Value2']
PIHOLE_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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>\"}]}\n                    "
PIHOLE_REPORT_ON=['new']
PIHOLE_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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?.\"}]}\n                    "

# INTRNT
#---------------------------
INTRNT_RUN='schedule'
INTRNT_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"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 ausf\\u00fchren\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. An hourly or daily <code>SCHEDULE</code> is a good option.\"}, {\"language_code\": \"de_de\", \"string\": \"Wann das Plugin ausgef\\u00fchrt werden soll. Eine st\\u00fcndliche oder t\\u00e4gliche <code>SCHEDULE</code> wird empfohlen.\"}]}\n                    "
INTRNT_CMD='python3 /app/front/plugins/internet_ip/script.py prev_ip={prev_ip} INTRNT_DIG_GET_IP_ARG={INTRNT_DIG_GET_IP_ARG}'
INTRNT_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/internet_ip/script.py prev_ip={prev_ip} INTRNT_DIG_GET_IP_ARG={INTRNT_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\"}]}\n                    "
INTRNT_DIG_GET_IP_ARG='-4 myip.opendns.com @resolver1.opendns.com'
INTRNT_DIG_GET_IP_ARG__metadata="                      {\"function\": \"INTRNT_DIG_GET_IP_ARG\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"-4 myip.opendns.com @resolver1.opendns.com\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Internet IP discovery\"}, {\"language_code\": \"es_es\", \"string\": \"Descubrir de IP de Internet\"}, {\"language_code\": \"de_de\", \"string\": \"Erkennung externer IP (\\\"Internet IP\\\")\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Change the <a href=\\\"https://linux.die.net/man/1/dig\\\" target=\\\"_blank\\\">dig utility</a> arguments if you have issues resolving your Internet IP. Arguments are added at the end of the following command: <code>dig +short </code>. Tested with: <br/> <ul> <li><code>@ns1.google.com -t txt o-o.myaddr.l.google.com</code></li><li> <code>-4 myip.opendns.com @resolver1.opendns.com</code></li></ul>\"}, {\"language_code\": \"es_es\", \"string\": \"Cambie los argumentos de la <a href=\\\"https://linux.die.net/man/1/dig\\\" target=\\\"_blank\\\">utilidad de dig</a> si tiene problemas para resolver su IP de Internet. Los argumentos se agregan al final del siguiente comando: <code>dig +short </code>.\"}, {\"language_code\": \"de_de\", \"string\": \"\\u00c4ndere die Argumente des <a href=\\\"https://linux.die.net/man/1/dig\\\" target=\\\"_blank\\\">dig Dienstprogramms</a>, wenn Probleme beim Aufl\\u00f6sen der externen IP auftreten. Argumente werden an das Ende des folgenden Befehls angeh\\u00e4ngt: <code>dig +short </code>.\"}]}\n                    "
INTRNT_RUN_SCHD='*/5 * * * *'
INTRNT_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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\": \"Zeitplan\"}], \"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. 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=\\\"#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 aktiv, wenn <code>schedule</code> in der <a href=\\\"#INTRNT_RUN\\\"><code>INTRNT_RUN</code>Einstellung</a> ausgew\\u00e4hlt wurde. Sichergehen, dass das Intervall in einem korrekten cron-\\u00e4hnlichen Format angegeben wurde (z.B. auf <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a> testen). <code>0 4 * * *</code> w\\u00fcrde den Scan t\\u00e4glich um 4 Uhr in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\">oben ausgew\\u00e4hlten <code>TIMEZONE</code></a> starten. Wird erst beim N\\u00c4CHSTEN Intervall ausgef\\u00fchrt. <br/>Es wird empfohlen, das Intervall aller Plugins, welche nach neuen Ger\\u00e4ten suchen, auf den gleichen Wert zu setzen.\"}]}\n                    "
INTRNT_RUN_TIMEOUT=30
INTRNT_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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\": \"Zeitlimit\"}], \"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.\"}]}\n                    "
INTRNT_RETRIES=3
INTRNT_RETRIES__metadata="                      {\"function\": \"RETRIES\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 3, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Retries\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Number of retries before Internet is marked as unreachable. Exponential backoff strategy is used between tries (1s - 1st retry, 2s - 2nd retry, etc).\"}]}\n                    "
INTRNT_WATCH=['Watched_Value1']
INTRNT_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"\\u00dcberwacht\"}], \"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> type </li></ul>\"}, {\"language_code\": \"de_de\", \"string\": \"Sende eine Benachrichtigung, wenn ein ausgw\\u00e4hlter Wert sich \\u00e4ndert. <code>STRG + klicken</code> zum aus-/abw\\u00e4hlen. <ul> <li><code>Watched_Value1</code> ist die Vorige IP (nicht empfohlen)</li><li><code>Watched_Value2</code> ist nicht in Verwendung</li><li><code>Watched_Value3</code> ist nicht in Verwendung </li><li><code>Watched_Value4</code> ist nicht in Verwendung </li></ul>\"}]}\n                    "
INTRNT_REPORT_ON=['new','watched-changed']
INTRNT_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige wenn\"}], \"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.\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige nur bei diesen Status. <code>new</code> bedeutet ein neues eindeutiges (einzigartige Kombination aus PrimaryId und SecondaryId) Objekt wurde erkennt. <code>watched-changed</code> bedeutet eine ausgew\\u00e4hlte <code>Watched_ValueN</code>-Spalte hat sich ge\\u00e4ndert.\"}]}\n                    "

# NMAPDEV
#---------------------------
NMAPDEV_RUN='disabled'
NMAPDEV_RUN__metadata="                      {\"function\": \"RUN\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Wann ausf\\u00fchren\"}], \"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=\\\"#NMAPDEV_RUN_SCHD\\\"><code>NMAPDEV_RUN_SCHD</code>setting</a>. \\u26a0 Use the same schedule if you have multiple <i class=\\\"fa-solid fa-magnifying-glass-plus\\\"></i> Device scanners enabled.<br/><br/> Depends on the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</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=\\\"#NMAPDEV_RUN_SCHD\\\"><code>NMAPDEV_RUN_SCHD</code></a> \"}, {\"language_code\": \"de_de\", \"string\": \"Ausw\\u00e4hlen wann der Netzwerkscan laufen soll. Typischerweise wird <code>schedule</code> ausgew\\u00e4hlt und ein cron-Intervall in der <a href=\\\"#NMAPDEV_RUN_SCHD\\\"><code>NMAPDEV_RUN_SCHD</code>Einstellung</a> gesetzt.\"}]}\n                    "
NMAPDEV_CMD='python3 /app/front/plugins/nmap_dev_scan/nmap_dev.py '
NMAPDEV_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/nmap_dev_scan/nmap_dev.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 should not be changed\"}, {\"language_code\": \"es_es\", \"string\": \"Comando para ejecutar. Esto no debe ser cambiado\"}, {\"language_code\": \"de_de\", \"string\": \"Auszuf\\u00fchrender Befehl. Dieser sollte nicht ge\\u00e4ndert werden\"}]}\n                    "
NMAPDEV_RUN_TIMEOUT=300
NMAPDEV_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Zeitlimit\"}], \"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.\"}, {\"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.\"}]}\n                    "
NMAPDEV_RUN_SCHD='*/5 * * * *'
NMAPDEV_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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\": \"Zeitplan\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#NMAPDEV_RUN\\\"><code>NMAPDEV_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=\\\"#NMAPDEV_RUN\\\"><code>NMAPDEV_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.\"}, {\"language_code\": \"de_de\", \"string\": \"Nur aktiv, wenn <code>schedule</code> in der <a href=\\\"#NMAPDEV_RUN\\\"><code>NMAPDEV_RUN</code> Einstellung</a> ausgew\\u00e4hlt wurde. Sichergehen, dass das Intervall in einem korrekten cron-\\u00e4hnlichen Format angegeben wurde (z.B. auf <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a> testen). <code>*/3 * * * *</code> w\\u00fcrde den Scan alle 3 Minuten starten. Wird erst beim N\\u00c4CHSTEN Intervall ausgef\\u00fchrt. <br/>Es wird empfohlen, das Intervall aller Plugins, welche nach neuen Ger\\u00e4ten suchen, auf den gleichen Wert zu setzen.\"}]}\n                    "
NMAPDEV_WATCH=[]
NMAPDEV_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"default_value\": [], \"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\"}, {\"language_code\": \"de_de\", \"string\": \"\\u00dcberwacht\"}], \"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 Name</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 Name</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>\"}, {\"language_code\": \"de_de\", \"string\": \"Sende eine Benachrichtigung, wenn ein ausgw\\u00e4hlter Wert sich \\u00e4ndert. <code>STRG + klicken</code> zum aus-/abw\\u00e4hlen. <ul> <li><code>Watched_Value1</code> ist der Namen</li><li><code>Watched_Value2</code> ist der Hersteller</li><li><code>Watched_Value3</code> ist das Interface </li><li><code>Watched_Value4</code> ist nicht in Verwendung </li></ul>\"}]}\n                    "
NMAPDEV_REPORT_ON=['new']
NMAPDEV_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige wenn\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When should notification be sent out.\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo debe enviarse una notificaci\\u00f3n.\"}, {\"language_code\": \"de_de\", \"string\": \"Wann Benachrichtigungen gesendet werden sollen.\"}]}\n                    "
NMAPDEV_ARGS='sudo nmap -sn -PR -oX - '
NMAPDEV_ARGS__metadata="                      {\"function\": \"ARGS\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"sudo nmap -sn -PR -oX - \", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Arguments\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Arguments to run nmap-scan with. Recommended and tested only with the setting: <br/> <code>sudo nmap -sn -PR -oX - </code>. <br/><br/> Note: The plugin attaches the interface and network mask, for example <code> -e eth1 192.168.1.0/24</code> and performs a separate scan for each interface specified in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</code> setting</a>.\"}]}\n                    "

# NMAP
#---------------------------
NMAP_RUN='schedule'
NMAP_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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>\"}]}\n                    "
NMAP_CMD='python3 /app/front/plugins/nmap_scan/script.py ips={ips} macs={macs} timeout={timeout} args={args}'
NMAP_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"python3 /app/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.\"}]}\n                    "
NMAP_ARGS='-p -10000'
NMAP_ARGS__metadata="                      {\"function\": \"ARGS\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
NMAP_RUN_SCHD='0 0 * * *'
NMAP_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
NMAP_RUN_TIMEOUT=30
NMAP_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NMAP_WATCH=['Watched_Value1']
NMAP_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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>\"}]}\n                    "
NMAP_REPORT_ON=['new','watched-changed']
NMAP_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "

# NSLOOKUP
#---------------------------
NSLOOKUP_RUN='before_name_updates'
NSLOOKUP_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"options\": [\"disabled\", \"before_name_updates\", \"on_new_device\", \"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 be executed. If enabled this will execute the scan until there are no <code>(unknown)</code> or <code>(name not found)</code> devices. Setting this to <code>on_new_device</code> or a daily <code>schedule</code> is recommended.<br/><br/> Depends on the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#SCAN_SUBNETS\\\"><code>SCAN_SUBNETS</code> setting</a>.\"}]}\n                    "
NSLOOKUP_CMD='python3 /app/front/plugins/nslookup_scan/nslookup.py'
NSLOOKUP_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/nslookup_scan/nslookup.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\"}]}\n                    "
NSLOOKUP_RUN_SCHD='*/30 * * * *'
NSLOOKUP_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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=\\\"#NSLOOKUP_RUN\\\"><code>NSLOOKUP_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=\\\"#NSLOOKUP_RUN\\\"><code>NSLOOKUP_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=\\\"#NSLOOKUP_RUN\\\"><code>NSLOOKUP_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.\"}]}\n                    "
NSLOOKUP_RUN_TIMEOUT=10
NSLOOKUP_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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\"}, {\"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.\"}]}\n                    "

# SMTP
#---------------------------
SMTP_RUN='disabled'
SMTP_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"test\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"options\": [\"disabled\", \"on_notification\"], \"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 sending notifications via the Email (SMTP) gateway.\"}, {\"language_code\": \"es_es\", \"string\": \"Si est\\u00e1 habilitado, se env\\u00eda un correo electr\\u00f3nico con una lista de cambios a los que se ha suscrito. Complete tambi\\u00e9n todas las configuraciones restantes relacionadas con la configuraci\\u00f3n de SMTP a continuaci\\u00f3n\"}]}\n                    "
SMTP_CMD='python3 /app/front/plugins/_publisher_email/email_smtp.py'
SMTP_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/_publisher_email/email_smtp.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\"}]}\n                    "
SMTP_RUN_TIMEOUT=20
SMTP_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 20, \"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.\"}]}\n                    "
SMTP_SERVER='smtp.gmail.com'
SMTP_SERVER__metadata="                      {\"function\": \"SERVER\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SMTP server URL\"}, {\"language_code\": \"es_es\", \"string\": \"URL del servidor SMTP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The SMTP server host URL. For example <code>smtp-relay.sendinblue.com</code>. To use Gmail as an SMTP server <a target=\\\"_blank\\\" href=\\\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\\\">follow this guide</a>\"}, {\"language_code\": \"es_es\", \"string\": \"La URL del host del servidor SMTP. Por ejemplo, <code>smtp-relay.sendinblue.com</code>. Para utilizar Gmail como servidor SMTP <a target=\\\"_blank\\\" href=\\\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\\\">siga esta gu\\u00eda</a >\"}]}\n                    "
SMTP_PORT=587
SMTP_PORT__metadata="                      {\"function\": \"PORT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 587, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SMTP server PORT\"}, {\"language_code\": \"es_es\", \"string\": \"Puerto del servidor SMTP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Port number used for the SMTP connection. Set to <code>0</code> if you do not want to use a port when connecting to the SMTP server.\"}, {\"language_code\": \"es_es\", \"string\": \"N\\u00famero de puerto utilizado para la conexi\\u00f3n SMTP. Establ\\u00e9zcalo en <code>0</code> si no desea utilizar un puerto al conectarse al servidor SMTP.\"}]}\n                    "
SMTP_SKIP_LOGIN=False
SMTP_SKIP_LOGIN__metadata="                      {\"function\": \"SKIP_LOGIN\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Skip authentication\"}, {\"language_code\": \"es_es\", \"string\": \"Omitir autenticaci\\u00f3n\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Do not use authentication when connecting to the SMTP server.\"}, {\"language_code\": \"es_es\", \"string\": \"No utilice la autenticaci\\u00f3n cuando se conecte al servidor SMTP.\"}]}\n                    "
SMTP_USER='user@gmail.com'
SMTP_USER__metadata="                      {\"function\": \"USER\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SMTP user\"}, {\"language_code\": \"es_es\", \"string\": \"Nombre de usuario SMTP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The user name used to login into the SMTP server (sometimes a full email address).\"}, {\"language_code\": \"es_es\", \"string\": \"El nombre de usuario utilizado para iniciar sesi\\u00f3n en el servidor SMTP (a veces, una direcci\\u00f3n de correo electr\\u00f3nico completa).\"}]}\n                    "
SMTP_PASS='password'
SMTP_PASS__metadata="                      {\"function\": \"PASS\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"password\"}], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"SMTP password\"}, {\"language_code\": \"es_es\", \"string\": \"Contrase\\u00f1a de SMTP\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The SMTP server password.\"}, {\"language_code\": \"es_es\", \"string\": \"La contrase\\u00f1a del servidor SMTP.\"}]}\n                    "
SMTP_SKIP_TLS=False
SMTP_SKIP_TLS__metadata="                      {\"function\": \"SKIP_TLS\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Do not use TLS\"}, {\"language_code\": \"es_es\", \"string\": \"No usar TLS\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Disable TLS when connecting to your SMTP server.\"}, {\"language_code\": \"es_es\", \"string\": \"Deshabilite TLS cuando se conecte a su servidor SMTP.\"}]}\n                    "
SMTP_FORCE_SSL=False
SMTP_FORCE_SSL__metadata="                      {\"function\": \"FORCE_SSL\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Force SSL\"}, {\"language_code\": \"es_es\", \"string\": \"Forzar SSL\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Force SSL when connecting to your SMTP server.\"}, {\"language_code\": \"es_es\", \"string\": \"Forzar SSL al conectarse a su servidor SMTP\"}]}\n                    "
SMTP_REPORT_TO='user@gmail.com'
SMTP_REPORT_TO__metadata="                      {\"function\": \"SMTP_REPORT_TO\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"user@gmail.com\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Send email to\"}, {\"language_code\": \"es_es\", \"string\": \"Enviar el email a\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Email address to which the notification will be send to.\"}, {\"language_code\": \"es_es\", \"string\": \"Direcci\\u00f3n de correo electr\\u00f3nico a la que se enviar\\u00e1 la notificaci\\u00f3n.\"}]}\n                    "
SMTP_REPORT_FROM='NetAlertX <user@gmail.com>'
SMTP_REPORT_FROM__metadata="                      {\"function\": \"SMTP_REPORT_FROM\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"NetAlertX <user@gmail.com>\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Email subject\"}, {\"language_code\": \"es_es\", \"string\": \"Asunto del email\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Notification email subject line. Some SMTP servers need this to be an email.\"}, {\"language_code\": \"es_es\", \"string\": \"Asunto del correo electr\\u00f3nico de notificaci\\u00f3n.\"}]}\n                    "

# CSVBCKP
#---------------------------
CSVBCKP_RUN='schedule'
CSVBCKP_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
CSVBCKP_CMD='python3 /app/front/plugins/csv_backup/script.py overwrite={overwrite} location={location}'
CSVBCKP_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/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\"}]}\n                    "
CSVBCKP_RUN_SCHD='0 2 * * 3'
CSVBCKP_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
CSVBCKP_RUN_TIMEOUT=30
CSVBCKP_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
CSVBCKP_overwrite=False
CSVBCKP_overwrite__metadata="                      {\"function\": \"overwrite\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
CSVBCKP_location='/app/config'
CSVBCKP_location__metadata="                      {\"function\": \"location\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"/app/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>/app/config</code>.\"}, {\"language_code\": \"es_es\", \"string\": \"Donde se debe guardar el archivo <code>devices.csv</code>. Por ejemplo <code>/app/config</code>.\"}, {\"language_code\": \"de_de\", \"string\": \"Wo die Datei <code>devices.csv</code> gespeichert werden soll. Zum Beispiel <code>/app/config</code>.\"}]}\n                    "

# DBCLNP
#---------------------------
DBCLNP_RUN='schedule'
DBCLNP_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
DBCLNP_CMD='python3 /app/front/plugins/db_cleanup/script.py pluginskeephistory={pluginskeephistory} hourstokeepnewdevice={hourstokeepnewdevice} daystokeepevents={daystokeepevents} pholuskeepdays={pholuskeepdays}'
DBCLNP_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/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\"}]}\n                    "
DBCLNP_RUN_SCHD='*/30 * * * *'
DBCLNP_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
DBCLNP_RUN_TIMEOUT=30
DBCLNP_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
DBCLNP_NOTIFI_HIST=100
DBCLNP_NOTIFI_HIST__metadata="                      {\"function\": \"NOTIFI_HIST\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 100, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Notifications History\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"How many historical entries of Notifications should be kept. This influences how many entries are also available in the Report section in the UI\"}]}\n                    "

# MAINT
#---------------------------
MAINT_RUN='schedule'
MAINT_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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 maintenance tasks should run. A daily or weekly <code>SCHEDULE</code> is a good option.\"}]}\n                    "
MAINT_CMD='python3 /app/front/plugins/maintenance/maintenance.py'
MAINT_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/maintenance/maintenance.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\"}]}\n                    "
MAINT_RUN_SCHD='0 2 * * *'
MAINT_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"0 2 * * *\", \"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=\\\"#MAINT_RUN\\\"><code>MAINT_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=\\\"#MAINT_RUN\\\"><code>MAINT_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.\"}]}\n                    "
MAINT_RUN_TIMEOUT=30
MAINT_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
MAINT_LOG_LENGTH=250000
MAINT_LOG_LENGTH__metadata="                      {\"function\": \"LOG_LENGTH\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 250000, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Log length\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"How many last <code>app.log</code> lines to keep. If <code>LOG_LEVEL</code> is set to <code>debug</code> the app generates about 10000 lines per hour, so when debugging an issue the recommended setting should cover the bug occurence timeframe. For example for a bug with a 3 day periodical appearence the value <code>1000000</code> should be sufficient. Setting this value to <code>1000000</code> generates approximatelly a 50MB <code>app.log</code> file. Set to <code>0</code> to disable log purging.\"}]}\n                    "

# NEWDEV
#---------------------------
NEWDEV_ignored_MACs=[]
NEWDEV_ignored_MACs__metadata="                      {\"function\": \"ignored_MACs\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this, false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"default_value\": [], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Ignored MACs\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"List of MACs to ignore. Use <code>%</code> as a wildcard. Ignored devices will not be shown anywhere in the UI or notifications. <br/><br/>For example <code>02:42:ac:%</code> to filter out docker containers.\"}]}\n                    "
NEWDEV_ignored_IPs=[]
NEWDEV_ignored_IPs__metadata="                      {\"function\": \"ignored_IPs\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this, false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"default_value\": [], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Ignored IPs\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"List of IPs to ignore. Use <code>%</code> as a wildcard. Ignored devices will not be shown anywhere in the UI or notifications. <br/><br/>For example <code>192.168.3.%</code> to filter out an IP range.\"}]}\n                    "
NEWDEV_NAME_CLEANUP_REGEX=['XC5fYWlycGxheQ==','XC5fdGNw','XC5sb2NhbGRvbWFpbg==','XC5sb2NhbA==','XC5fZXNwaG9tZWxpYg==','XC5fZ29vZ2xlY2FzdA==','XC5sYW4=','XC5ob21l','LVthLWZBLUYwLTldezMyfQ==','Iy4q']
NEWDEV_NAME_CLEANUP_REGEX__metadata="                      {\"function\": \"NAME_CLEANUP_REGEX\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter value\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this, false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": [\"base64\"]}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}]}, \"default_value\": [\"XC5fYWlycGxheQ==\", \"XC5fdGNw\", \"XC5sb2NhbGRvbWFpbg==\", \"XC5sb2NhbA==\", \"XC5fZXNwaG9tZWxpYg==\", \"XC5fZ29vZ2xlY2FzdA==\", \"XC5sYW4=\", \"XC5ob21l\", \"LVthLWZBLUYwLTldezMyfQ==\", \"Iy4q\"], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Name Cleanup REGEX\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"All the newly discovered device names are clened up by applying the following REGEX expression in this order. All the below are replaced by a blank string.\"}]}\n                    "
NEWDEV_dev_MAC=''
NEWDEV_dev_MAC__metadata="                      {\"function\": \"dev_MAC\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Name='(unknown)'
NEWDEV_dev_Name__metadata="                      {\"function\": \"dev_Name\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Owner=''
NEWDEV_dev_Owner__metadata="                      {\"function\": \"dev_Owner\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 30, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT DISTINCT '' as id, '\\u274cNone' as name UNION SELECT dev_Owner as id, dev_Owner as name FROM (SELECT dev_Owner FROM Devices UNION SELECT 'House' ) AS all_devices ORDER BY id;\"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Owner\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The owner of the device.\"}]}\n                    "
NEWDEV_dev_DeviceType=''
NEWDEV_dev_DeviceType__metadata="                      {\"function\": \"dev_DeviceType\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 30, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT DISTINCT 9 as ord, dev_DeviceType as id, dev_DeviceType as name FROM Devices WHERE dev_DeviceType NOT IN ('', 'Smartphone', 'Tablet', 'Laptop', 'Mini PC', 'PC', 'Printer', 'Server', 'Singleboard Computer (SBC)', 'NAS', 'Domotic', 'IP Camera', 'Game Console', 'SmartTV', 'TV Decoder', 'Virtual Assistance', 'Clock', 'House Appliance', 'Phone', 'Radio', 'AP', 'Gateway', 'Firewall', 'Hypervisor', 'Powerline', 'Switch', 'WLAN', 'PLC', 'Router', 'USB LAN Adapter', 'USB WIFI Adapter') UNION SELECT 0 as ord, '', '\\u274cNone' UNION SELECT 1 as ord, '-----', '-- \\ud83d\\udcf1Handhelds --' UNION SELECT 1 as ord, 'Smartphone', 'Smartphone' UNION SELECT 1 as ord, 'Tablet', 'Tablet' UNION SELECT 2 as ord, '-----', '-- \\ud83d\\udcbbComputers --' UNION SELECT 2 as ord, 'Laptop', 'Laptop' UNION SELECT 2 as ord, 'Mini PC', 'Mini PC' UNION SELECT 2 as ord, 'PC', 'PC' UNION SELECT 2 as ord, 'Printer', 'Printer' UNION SELECT 2 as ord, 'Server', 'Server' UNION SELECT 2 as ord, 'Singleboard Computer (SBC)', 'Singleboard Computer (SBC)' UNION SELECT 2 as ord, 'NAS', 'NAS' UNION SELECT 3 as ord, '-----', '-- \\ud83c\\udfe0Smart home --' UNION SELECT 3 as ord, 'Domotic', 'Domotic' UNION SELECT 3 as ord, 'IP Camera', 'IP Camera' UNION SELECT 3 as ord, 'Game Console', 'Game Console' UNION SELECT 3 as ord, 'SmartTV', 'SmartTV' UNION SELECT 3 as ord, 'TV Decoder', 'TV Decoder' UNION SELECT 3 as ord, 'Virtual Assistance', 'Virtual Assistance' UNION SELECT 4 as ord, '-----', '-- Wired --' UNION SELECT 4 as ord, 'Clock', 'Clock' UNION SELECT 4 as ord, 'House Appliance', 'House Appliance' UNION SELECT 4 as ord, 'Phone', 'Phone' UNION SELECT 4 as ord, 'Radio', 'Radio' UNION SELECT 5 as ord, '-----', '-- \\ud83d\\udce1Network nodes --' UNION SELECT 5 as ord, 'AP', 'AP' UNION SELECT 5 as ord, 'Gateway', 'Gateway' UNION SELECT 5 as ord, 'Firewall', 'Firewall' UNION SELECT 5 as ord, 'Hypervisor', 'Hypervisor' UNION SELECT 5 as ord, 'Powerline', 'Powerline' UNION SELECT 5 as ord, 'Switch', 'Switch' UNION SELECT 5 as ord, 'WLAN', 'WLAN' UNION SELECT 5 as ord, 'PLC', 'PLC' UNION SELECT 5 as ord, 'Router', 'Router' UNION SELECT 5 as ord, 'USB LAN Adapter', 'USB LAN Adapter' UNION SELECT 5 as ord, 'USB WIFI Adapter', 'USB WIFI Adapter' UNION SELECT 9 as ord, '-----', '-- \\u2699Custom --' UNION SELECT 10 as ord, '-----', '-----' UNION SELECT 10 as ord, 'Other', 'Other' ORDER BY 1,2;\"}, {\"name\": \"uilang\", \"type\": \"setting\", \"value\": \"UI_LANG\"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Type\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The type of the device.\"}]}\n                    "
NEWDEV_dev_Vendor=''
NEWDEV_dev_Vendor__metadata="                      {\"function\": \"dev_Vendor\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Favorite=0
NEWDEV_dev_Favorite__metadata="                      {\"function\": \"dev_Favorite\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Group=''
NEWDEV_dev_Group__metadata="                      {\"function\": \"dev_Group\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 10, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT DISTINCT '' as id, '\\u274cNone' as name UNION SELECT dev_Group as id, dev_Group as name FROM (SELECT dev_Group FROM Devices WHERE dev_Group <> '' UNION SELECT 'Personal' UNION SELECT 'Always on' UNION SELECT 'Friends' UNION SELECT 'Others' ) AS all_devices ORDER BY id;\"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Group\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The group to which the device belongs.\"}]}\n                    "
NEWDEV_dev_Comments=''
NEWDEV_dev_Comments__metadata="                      {\"function\": \"dev_Comments\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_FirstConnection=''
NEWDEV_dev_FirstConnection__metadata="                      {\"function\": \"dev_FirstConnection\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_LastConnection=''
NEWDEV_dev_LastConnection__metadata="                      {\"function\": \"dev_LastConnection\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_LastIP=''
NEWDEV_dev_LastIP__metadata="                      {\"function\": \"dev_LastIP\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_StaticIP=0
NEWDEV_dev_StaticIP__metadata="                      {\"function\": \"dev_StaticIP\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_ScanCycle=1
NEWDEV_dev_ScanCycle__metadata="                      {\"function\": \"dev_ScanCycle\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_LogEvents=1
NEWDEV_dev_LogEvents__metadata="                      {\"function\": \"dev_LogEvents\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_AlertEvents=1
NEWDEV_dev_AlertEvents__metadata="                      {\"function\": \"dev_AlertEvents\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_AlertDeviceDown=0
NEWDEV_dev_AlertDeviceDown__metadata="                      {\"function\": \"dev_AlertDeviceDown\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_SkipRepeated='0'
NEWDEV_dev_SkipRepeated__metadata="                      {\"function\": \"dev_SkipRepeated\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": 0, \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT '0' as id, '0 (notify all)' as name UNION SELECT '168' as id, '1 week' as name UNION SELECT '24' as id, '1 day' as name UNION SELECT '8' as id, '8 h' as name UNION SELECT '1' as id, '1 h' as name\"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Skip Repeated (h)\"}], \"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.\"}]}\n                    "
NEWDEV_dev_LastNotification=''
NEWDEV_dev_LastNotification__metadata="                      {\"function\": \"dev_LastNotification\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_PresentLastScan=1
NEWDEV_dev_PresentLastScan__metadata="                      {\"function\": \"dev_PresentLastScan\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_NewDevice=1
NEWDEV_dev_NewDevice__metadata="                      {\"function\": \"dev_NewDevice\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": 1, \"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. If checked this will show the New status for the device and include it in lists when the New Devices filter is active. Doesn't affect notifications.\"}]}\n                    "
NEWDEV_dev_Location=''
NEWDEV_dev_Location__metadata="                      {\"function\": \"dev_Location\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 250, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT DISTINCT '' as id, '\\u274cNone' as name UNION SELECT dev_Location as id, dev_Location as name FROM (SELECT dev_Location FROM Devices where dev_Location not in (null, 'null', '') UNION SELECT 'Bathroom' UNION SELECT 'Bedroom' UNION SELECT 'Dining room' UNION SELECT 'Hall' UNION SELECT 'Kitchen' UNION SELECT 'Laundry' UNION SELECT 'Living room' UNION SELECT 'Study' UNION SELECT 'Attic' UNION SELECT 'Basement' UNION SELECT 'Garage' UNION SELECT 'Back yard' UNION SELECT 'Garden' UNION SELECT 'Terrace') AS all_devices ORDER BY id; \"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Device Location\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The location of the device.\"}]}\n                    "
NEWDEV_dev_Archived=0
NEWDEV_dev_Archived__metadata="                      {\"function\": \"dev_Archived\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Network_Node_MAC_ADDR='Internet'
NEWDEV_dev_Network_Node_MAC_ADDR__metadata="                      {\"function\": \"dev_Network_Node_MAC_ADDR\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"SELECT '\\u274cNone' as name, '' as id UNION SELECT Dev_Name as name, dev_MAC as id FROM Devices WHERE EXISTS (SELECT 1 FROM Settings WHERE Code_Name = 'NETWORK_DEVICE_TYPES' AND LOWER(value) LIKE '%' || LOWER(dev_DeviceType) || '%' AND dev_DeviceType <> '')\"}, {\"name\": \"target_macs\", \"type\": \"setting\", \"value\": \"KNWN_target_macs\"}], \"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.\"}]}\n                    "
NEWDEV_dev_Network_Node_port='0'
NEWDEV_dev_Network_Node_port__metadata="                      {\"function\": \"dev_Network_Node_port\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
NEWDEV_dev_Icon='PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k+'
NEWDEV_dev_Icon__metadata="                      {\"function\": \"dev_Icon\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"span\", \"elementOptions\": [{\"cssClasses\": \"input-group-addon iconPreview\"}, {\"getStringKey\": \"Gen_SelectToPreview\"}, {\"customId\": \"NEWDEV_dev_Icon_preview\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"cssClasses\": \"col-xs-12\"}, {\"onChange\": \"updateIconPreview(this)\"}, {\"customParams\": \"NEWDEV_dev_Icon,NEWDEV_dev_Icon_preview\"}], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"sql\", \"value\": \"WITH RECURSIVE SettingsIcons AS (SELECT REPLACE(REPLACE(REPLACE(Value, '[', ''), ']', ''), '''', '') AS icon_list FROM Settings WHERE Code_Name = 'UI_ICONS'), SplitIcons AS (SELECT TRIM(SUBSTR(icon_list, 1, INSTR(icon_list || ',', ',') - 1)) AS icon, SUBSTR(icon_list, INSTR(icon_list || ',', ',') + 1) AS remaining_icons FROM SettingsIcons WHERE icon_list <> '' UNION ALL SELECT TRIM(SUBSTR(remaining_icons, 1, INSTR(remaining_icons || ',', ',') - 1)) AS icon, SUBSTR(remaining_icons, INSTR(remaining_icons || ',', ',') + 1) AS remaining_icons FROM SplitIcons WHERE remaining_icons <> '') SELECT DISTINCT * FROM (SELECT icon as name, icon as id  FROM SplitIcons UNION SELECT  '\\u274cNone' AS name, '' AS id  UNION SELECT Dev_Icon AS name, Dev_Icon AS id FROM Devices WHERE Dev_Icon <> '') AS combined_results;\"}], \"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/NetAlertX/blob/main/docs/ICONS.md\\\" target=\\\"_blank\\\">documentation on icons</a> for more details.\"}]}\n                    "

# NTFPRCS
#---------------------------
NTFPRCS_INCLUDED_SECTIONS=['new_devices','down_devices','events']
NTFPRCS_INCLUDED_SECTIONS__metadata="                      {\"function\": \"NTFPRCS_INCLUDED_SECTIONS\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"default_value\": [\"new_devices\", \"down_devices\", \"events\"], \"options\": [\"new_devices\", \"down_devices\", \"down_reconnected\", \"events\", \"plugins\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Notify on\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtigungen\"}, {\"language_code\": \"es_es\", \"string\": \"Notificar en\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Specifies which events trigger notifications. Remove the event type(s) you do not want to get notified on. This setting overrides device-specific settings in the UI. (<code>CTRL + Click</code> to select/deselect).\"}, {\"language_code\": \"de_de\", \"string\": \"Spezifiziert, bei welchen Events Benachrichtigungen versendet werden. Entfernen Sie die Eventtypen, bei welchen Sie nicht benachrichtigt werden wollen. Diese Einstellung \\u00fcberschreibt ger\\u00e4tespezifische Einstellungen im UI. (<code>STRG + klicken</code> zum aus-/abw\\u00e4hlen).\"}, {\"language_code\": \"es_es\", \"string\": \"Especifica que eventos env\\u00edan notificaciones. Elimina los tipos de eventos de los que no quieras recibir notificaciones. Este ajuste sobreescribe los ajustes espec\\u00edficos de los dispositivos en la interfaz. (<code>CTRL + Clic</code> para seleccionar / deseleccionar).\"}]}\n                    "
NTFPRCS_alert_down_time=5
NTFPRCS_alert_down_time__metadata="                      {\"function\": \"alert_down_time\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 5, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Alert Down After\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"After how many minutes a device is reported as down and a notification is sent.\"}]}\n                    "
NTFPRCS_new_dev_condition=''
NTFPRCS_new_dev_condition__metadata="                      {\"function\": \"new_dev_condition\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"New Devices Filter\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"You can specify a SQL where condition to filter out New Devices from notifications. For example <code>AND dev_LastIP NOT LIKE '192.168.3.%'</code> will always exlude New Device notifications for all devices with the IP starting with <code>192.168.3.%</code>.\"}]}\n                    "
NTFPRCS_event_condition=''
NTFPRCS_event_condition__metadata="                      {\"function\": \"event_condition\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Events Filter\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"You can specify a SQL where condition to filter out Events from notifications. For example <code>AND dev_LastIP NOT LIKE '192.168.3.%'</code> will always exlude New Device notifications for all devices with the IP starting with <code>192.168.3.%</code>.\"}]}\n                    "

# PHOLUS
#---------------------------
PHOLUS_RUN='on_new_device'
PHOLUS_RUN__metadata="                      {\"function\": \"RUN\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"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/NetAlertX/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/NetAlertX/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>.\"}]}\n                    "
PHOLUS_CMD='python3 /app/front/plugins/pholus_scan/script.py userSubnets={subnets} timeoutSec={timeout}'
PHOLUS_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/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\"}]}\n                    "
PHOLUS_RUN_TIMEOUT=300
PHOLUS_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
PHOLUS_RUN_SCHD='30 3 * * *'
PHOLUS_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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/>\"}]}\n                    "
PHOLUS_DAYS_DATA=30
PHOLUS_DAYS_DATA__metadata="                      {\"function\": \"DAYS_DATA\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Retention of data\"}, {\"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!). Introduzca <code>0</code> para desactivar.\"}]}\n                    "
PHOLUS_WATCH=['Watched_Value1','Watched_Value2']
PHOLUS_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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>\"}]}\n                    "
PHOLUS_REPORT_ON=['new']
PHOLUS_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "

# SETPWD
#---------------------------
SETPWD_enable_password=False
SETPWD_enable_password__metadata="                      {\"function\": \"enable_password\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Enable login\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When enabled a login dialog is displayed. If facing issues, you can always disable the login by setting <code>SETPWD_enable_password=False</code> in your <code>app.conf</code> file.\"}]}\n                    "
SETPWD_password='8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'
SETPWD_password__metadata="                      {\"function\": \"password\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"password\"}], \"transformers\": [\"sha256\"]}]}, \"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>.\"}]}\n                    "

# SYNC
#---------------------------
SYNC_RUN='disabled'
SYNC_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\", \"always_after_scan\", \"on_new_device\", \"on_notification\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run [n,h]\"}, {\"language_code\": \"es_es\", \"string\": \"Cu\\u00e1ndo ejecutar [n,h]\"}, {\"language_code\": \"de_de\", \"string\": \"Wann laufen [n,h]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the sync should run. Data might be lost if you run the sync less frequently. Good options are <code>always_after_scan</code>, <code>on_new_device</code>, <code>on_notification</code>\"}]}\n                    "
SYNC_RUN_SCHD='*/5 * * * *'
SYNC_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"*/5 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule [n,h]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#SYNC_RUN\\\"><code>SYNC_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=\\\"#SYNC_RUN\\\"><code>SYNC_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=\\\"#SYNC_RUN\\\"><code>SYNC_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.\"}]}\n                    "
SYNC_api_token=''
SYNC_api_token__metadata="                      {\"function\": \"api_token\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"API token [n,h]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"API token to secure communication. It's sent in the request header. The API token needs to be the same on the hub and on the nodes.\"}]}\n                    "
SYNC_encryption_key=''
SYNC_encryption_key__metadata="                      {\"function\": \"encryption_key\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Encryption Key [n,h]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Encryption key used to encrypt the data before sending and for decryption on the hub. The key needs to be the same on the hub and on the nodes.\"}]}\n                    "
SYNC_nodes=[]
SYNC_nodes__metadata="                      {\"function\": \"nodes\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"placeholder\": \"Enter full url\"}, {\"suffix\": \"_in\"}, {\"cssClasses\": \"col-sm-10\"}, {\"prefillValue\": \"null\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": [\"_in\"]}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-12\"}, {\"onClick\": \"addList(this, false)\"}, {\"getStringKey\": \"Gen_Add\"}], \"transformers\": []}, {\"elementType\": \"select\", \"elementHasInputValue\": 1, \"elementOptions\": [{\"multiple\": \"true\"}, {\"readonly\": \"true\"}, {\"editable\": \"true\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeAllOptions(this)\"}, {\"getStringKey\": \"Gen_Remove_All\"}], \"transformers\": []}, {\"elementType\": \"button\", \"elementOptions\": [{\"sourceSuffixes\": []}, {\"separator\": \"\"}, {\"cssClasses\": \"col-xs-6\"}, {\"onClick\": \"removeFromList(this)\"}, {\"getStringKey\": \"Gen_Remove_Last\"}], \"transformers\": []}]}, \"default_value\": [], \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Nodes [h]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"If specified, the hub will pull Devices data from the listed nodes.\"}]}\n                    "
SYNC_hub_url=''
SYNC_hub_url__metadata="                      {\"function\": \"hub_url\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Hub URL [n]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"The URL of the hub (target instance). Set on the Node. Without a trailig slash, for example <code>http://192.168.1.82:20211</code>\"}]}\n                    "
SYNC_node_name=''
SYNC_node_name__metadata="                      {\"function\": \"node_name\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Node name [n]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Use a unique node name, without spaces or special characters, such as <code>Node_Vlan01</code>\"}]}\n                    "
SYNC_devices=False
SYNC_devices__metadata="                      {\"function\": \"devices\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Sync Devices [n]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When enabled the whole Devices table is sent over. Only new devices with new MACs are inserted in the target hub.\"}]}\n                    "
SYNC_plugins=[]
SYNC_plugins__metadata="                      {\"function\": \"plugins\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"maxLength\": 50, \"default_value\": [], \"options\": [\"{value}\"], \"options_params\": [{\"name\": \"value\", \"type\": \"setting\", \"value\": \"LOADED_PLUGINS\"}], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Sync Plugins [n]\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Plugins to synchronize. Only plugins that produce some kind of output in <code>last_result.log</code> can be synchronized.\"}]}\n                    "
SYNC_CMD='python3 /app/front/plugins/sync/sync.py'
SYNC_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/sync/sync.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\"}]}\n                    "
SYNC_RUN_TIMEOUT=30
SYNC_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "

# VNDRPDT
#---------------------------
VNDRPDT_RUN='schedule'
VNDRPDT_RUN__metadata="                      {\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"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 ausf\\u00fchren\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. An overnight weekly <code>SCHEDULE</code> is recommended.\"}, {\"language_code\": \"de_de\", \"string\": \"Wann das Plugin ausgef\\u00fchrt werden soll. Eine w\\u00f6chentliche <code>SCHEDULE</code> in der Nacht wird empfohlen.\"}]}\n                    "
VNDRPDT_CMD='python3 /app/front/plugins/vendor_update/script.py'
VNDRPDT_CMD__metadata="                      {\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/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\"}]}\n                    "
VNDRPDT_RUN_SCHD='0 4 * * 3'
VNDRPDT_RUN_SCHD__metadata="                      {\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"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\": \"Zeitplan\"}], \"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 aktiv, wenn <code>schedule</code> in der <a href=\\\"#VNDRPDT_RUN\\\"><code>VNDRPDT_RUN</code> Einstellung</a> ausgew\\u00e4hlt wurde. Sichergehen, dass das Intervall in einem korrekten cron-\\u00e4hnlichen Format angegeben wurde (z.B. auf <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a> testen). <code>0 4 * * *</code> w\\u00fcrde den Scan t\\u00e4glich um 4 Uhr in der <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\">oben ausgew\\u00e4hlten <code>TIMEZONE</code></a> starten. Wird erst beim N\\u00c4CHSTEN Intervall ausgef\\u00fchrt. <br/>Es wird empfohlen, das Intervall aller Plugins, welche nach neuen Ger\\u00e4ten suchen, auf den gleichen Wert zu setzen.\"}]}\n                    "
VNDRPDT_RUN_TIMEOUT=600
VNDRPDT_RUN_TIMEOUT__metadata="                      {\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"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.\"}]}\n                    "
VNDRPDT_WATCH=['Watched_Value1']
VNDRPDT_WATCH__metadata="                      {\"function\": \"WATCH\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"\\u00dcberwacht\"}], \"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>\"}, {\"language_code\": \"de_de\", \"string\": \"Sende eine Benachrichtigung, wenn ein ausgw\\u00e4hlter Wert sich \\u00e4ndert. <code>STRG + klicken</code> zum aus-/abw\\u00e4hlen. <ul> <li><code>Watched_Value1</code> ist der Herstellername</li><li><code>Watched_Value2</code> ist der Ger\\u00e4tename</li><li><code>Watched_Value3</code> ist nicht in Verwendung </li><li><code>Watched_Value4</code> ist nicht in Verwendung </li></ul>\"}]}\n                    "
VNDRPDT_REPORT_ON=['new','watched-changed']
VNDRPDT_REPORT_ON__metadata="                      {\"function\": \"REPORT_ON\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\"}], \"transformers\": []}]}, \"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\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige wenn\"}], \"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.\"}, {\"language_code\": \"de_de\", \"string\": \"Benachrichtige nur bei diesen Status. <code>new</code> bedeutet ein neues eindeutiges (einzigartige Kombination aus PrimaryId und SecondaryId) Objekt wurde erkennt. <code>watched-changed</code> bedeutet eine ausgew\\u00e4hlte <code>Watched_ValueN</code>-Spalte hat sich ge\\u00e4ndert.\"}]}\n                    "

# WORKFLOWS
#---------------------------
WORKFLOWS_AppEvents_hist=5000
WORKFLOWS_AppEvents_hist__metadata="                      {\"function\": \"AppEvents_hist\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 5000, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"App Events History\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"How many historical entries of Application Events should be kept. This influences how many entries are also available in the Workflows section in the UI.\"}]}\n                    "

#-------------------IMPORTANT INFO-------------------#
#   This file is ingested by a python script, so if  #
#        modified it needs to use python syntax      #
#-------------------IMPORTANT INFO-------------------#
thefunkygibbon commented 1 day ago

image

jokob-sk commented 1 day ago

Thanks for the report - it seems like omada scan is failing - @FlyingToto - if you have a bit of time - do you have an idea why - there seems to be a MAC lookup by IP which seems to fail - looks like it's when the code is trying to find the default router. I'm unsure how to gracefully handle a Null/NoneType here - could teh code gracefully fail and return at least teh devices list even though the network mapping failed?

def ietf2ieee_mac_formater(inputmac):
    return(inputmac.upper().replace(':','-'))

    # step1 let's find the the default router
    # 
    default_router_ip =  find_default_gateway_ip()
    default_router_mac = ietf2ieee_mac_formater(get_mac_from_IP(default_router_ip))
    device_data_bymac[default_router_mac][TYPE] = 'Firewall'           

https://github.com/jokob-sk/NetAlertX/blob/dcc43d1f3c6611cf1900c4d2d7aae0c5ec077ab4/front/plugins/omada_sdn_imp/omada_sdn.py#L501

thanks in advance!

jokob-sk commented 1 day ago

@thefunkygibbon

Could you please confirm your subnet configuration for arpscan is correct?

09:40:29 [Plugin utils] ---------------------------------------------
09:40:29 [Plugin utils] display_name: Arp-Scan (Network scan)
09:40:29 [Plugins] Executing: python3 /app/front/plugins/arp_scan/script.py userSubnets={subnets}
09:40:30 [ARP Scan] In script 
09:40:30 [ARP Scan] userSubnetsParam: 192.168.1.0/24 --interface=eth1
09:40:30 [Database] Opening DB
09:40:30 [ARP Scan] arpscan_output: 
09:40:30 [ARP Scan] Found: Devices without duplicates 0
09:40:30 Devices List len:0
09:40:30 Devices List:[]
09:40:30 [Plugins] No output received from the plugin "ARPSCAN"
09:40:30 [Plugin utils] ---------------------------------------------

It seems like you have set the subnet to 192.168.1.0/24 --interface=eth1, but in omada it looks like your subnet is 192.168.0.0/24 .

Could you please post a screenshot of your subnets from About -> System Info? You can read on how to figure out your subnet here: https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md#network-mask

thefunkygibbon commented 1 day ago

yeah, not sure where that .1.0/24 came from, i don't see any settings relevant in the settings screen for the subnet range. and certainly nothing has changed there. double confusion given that I also have pihole configured within this, wouldn't that flag things as "online" too , if there is a valid dhcp lease?

image

jokob-sk commented 1 day ago

Thanks for that! Can you please update the SCAN_SUBNETS according to the available subnets?

I assume you should change the current value to:

or

If above doesn't work, please post the output of ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'

FlyingToto commented 19 hours ago

@jokob-sk

  1. I just started receiving parts for my PC so I should be back online sometime next week.
  2. yes the code to find the default router could use a bit more error proofing.... shouldn't be a hard to sort out because I used to just hardcode a dummy during early testing....

@thefunkygibbon just to be clear, your lan is 192.168.0.1/24 correct?
what is you default router IP? I assume it is: 192.168.0.1? (on linux: netstat -rn) do you happen to know your default router MAC? (on linux: ping 192.168.0.1 && arp -a |grep 192.168.0.1)

jokob-sk commented 18 hours ago

Thanks for the help in advance @FlyingToto 🙏 hope the new PC brings you joy 🙂

thefunkygibbon commented 15 hours ago

thanks both, yes my home net is 192.168.0.0/24 and my firewall/default is .254.
note that as I think I've mentioned before , I'm not using an omada router/firewall. afaik the omada system has no interest in telling it about 3rd party gateways.

thefunkygibbon commented 15 hours ago

I will check my fw mac later, I'm out at the moment and accessing from my mobile is a pita

thefunkygibbon commented 11 hours ago

Thanks for that! Can you please update the SCAN_SUBNETS according to the available subnets?

I assume you should change the current value to:

  • 192.168.0.2/24 --interface=eno1

or

  • 192.168.0.0/24 --interface=eno1

If above doesn't work, please post the output of ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'

Ok I've done this now and have waited 10 mins or so and not seeing any online devices. Still a little confused as to why its stopped though, I've not changed the above setting before and it was working previously.
Would the fact that I've also got Omada and Pihole plugins configured not also tell the system that devices are, actually online?

thefunkygibbon commented 11 hours ago

ok restarting it seems to have kicked it back into life. I can see 35 devices online which sounds about right.

my point above about the other plugins still stands though

FlyingToto commented 10 hours ago

yes I think I can put a quick workaround to fix omada plugin as soon as my PC is back online (probably next week) Having the gateway on the last ip of the range is a bit unusual but the code should still be able to handle it regardless so I might need to ask you a bit more debugging info to get to the root of it (after pushing the workaround).

thefunkygibbon commented 10 hours ago

wouldn't say it was unusual. I've worked in netsec for 20+ years and most companies I've worked with use the last IP of the subnet as the router/gateway/firewall address. I get that a fair amount of home user ISP provided routers tend to use .1 though.

Thanks for the update, I'm in no great hurry, but i'll be glad to help in any way i can.