From 925673706c55388683b67612d48a8217cdd4c2b2 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Fri, 29 Nov 2024 18:17:44 +0100 Subject: [PATCH 1/7] Added FREEBOX plugin Co-authored-by: artemiscode@hotmail.it --- Dockerfile | 2 +- front/plugins/freebox/README.md | 23 ++ front/plugins/freebox/config.json | 504 ++++++++++++++++++++++++++++++ front/plugins/freebox/freebox.py | 168 ++++++++++ 4 files changed, 696 insertions(+), 1 deletion(-) create mode 100644 front/plugins/freebox/README.md create mode 100644 front/plugins/freebox/config.json create mode 100644 front/plugins/freebox/freebox.py diff --git a/Dockerfile b/Dockerfile index c44ff04d..3d8e5307 100755 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ ENV PATH="/opt/venv/bin:$PATH" COPY . ${INSTALL_DIR}/ -RUN pip install graphene flask netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros \ +RUN pip install graphene flask netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git \ && bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;" diff --git a/front/plugins/freebox/README.md b/front/plugins/freebox/README.md new file mode 100644 index 00000000..4c0aa412 --- /dev/null +++ b/front/plugins/freebox/README.md @@ -0,0 +1,23 @@ +## Overview + +Plugin functionality overview and links to external resources if relevant. Include use cases if available. + +> [!TIP] +> Some tip. + +### Quick setup guide + +To set up the plugin correctly, make sure... + +#### Required Settings + +- When to run `PREF_RUN` +- + +### Usage + +- Head to **Settings** > **Plugin name** to adjust the default values. + +### Notes + +- Additional notes, limitations, Author info. \ No newline at end of file diff --git a/front/plugins/freebox/config.json b/front/plugins/freebox/config.json new file mode 100644 index 00000000..f04cae74 --- /dev/null +++ b/front/plugins/freebox/config.json @@ -0,0 +1,504 @@ +{ + "code_name": "freebox", + "unique_prefix": "FREEBOX", + "plugin_type": "device_scanner", + "execution_order": "Layer_0", + "enabled": true, + "data_source": "script", + "mapped_to_table": "CurrentScan", + "data_filters": [ + { + "compare_column": "Object_PrimaryID", + "compare_operator": "==", + "compare_field_id": "txtMacFilter", + "compare_js_template": "'{value}'.toString()", + "compare_use_quotes": true + } + ], + "show_ui": true, + "localized": [ + "display_name", + "description", + "icon" + ], + "display_name": [ + { + "language_code": "en_us", + "string": "Freebox" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Plugin to discover devices and names via Freebox routers" + } + ], + "icon": [ + { + "language_code": "en_us", + "string": "" + } + ], + "params": [], + "settings": [ + { + "function": "RUN", + "events": [ + "run" + ], + "type": { + "dataType": "string", + "elements": [ + { + "elementType": "select", + "elementOptions": [], + "transformers": [] + } + ] + }, + "default_value": "disabled", + "options": [ + "disabled", + "once", + "schedule", + "always_after_scan", + "on_new_device", + "on_notification" + ], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "When to run" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "When the plugin should run." + } + ] + }, + { + "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 schedule in the SYNC_RUN setting. Make sure you enter the schedule in the correct cron-like format (e.g. validate at crontab.guru). For example entering 0 4 * * * will run the scan after 4 am in the TIMEZONE you set above. Will be run NEXT time the time passes." + } + ] + }, + { + "function": "address", + "type": { + "dataType": "string", + "elements": [ + { + "elementType": "input", + "elementOptions": [], + "transformers": [] + } + ] + }, + "maxLength": 50, + "default_value": "mafreebox.freebox.fr", + "options": [], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "Address" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Address of the Freebox router. You will need to pair the device as explained in the docs" + } + ] + }, + { + "function": "api_version", + "type": { + "dataType": "integer", + "elements": [ + { + "elementType": "input", + "elementOptions": [ + { + "type": "number" + } + ], + "transformers": [] + } + ] + }, + "default_value": 6, + "options": [], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "API version" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Which version of the API o use" + } + ] + }, + { + "function": "api_port", + "type": { + "dataType": "integer", + "elements": [ + { + "elementType": "input", + "elementOptions": [ + { + "type": "number" + } + ], + "transformers": [] + } + ] + }, + "default_value": 443, + "options": [], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "HTTP(S) port" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Port for remote HTTP(S) access. This will be different for your device." + } + ] + }, + { + "function": "CMD", + "type": { + "dataType": "string", + "elements": [ + { + "elementType": "input", + "elementOptions": [ + { + "readonly": "" + } + ], + "transformers": [] + } + ] + }, + "default_value": "python3 /app/front/plugins/freebox/freebox.py", + "options": [], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "Command" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Command to run. This can not be changed" + } + ] + }, + { + "function": "RUN_TIMEOUT", + "type": { + "dataType": "integer", + "elements": [ + { + "elementType": "input", + "elementOptions": [ + { + "type": "number" + } + ], + "transformers": [] + } + ] + }, + "default_value": 30, + "options": [], + "localized": [ + "name", + "description" + ], + "name": [ + { + "language_code": "en_us", + "string": "Run timeout" + } + ], + "description": [ + { + "language_code": "en_us", + "string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted." + } + ] + } + ], + "database_column_definitions": [ + { + "column": "Index", + "css_classes": "col-sm-2", + "show": true, + "type": "none", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Index" + } + ] + }, + { + "column": "Object_PrimaryID", + "mapped_to_column": "cur_MAC", + "css_classes": "col-sm-2", + "show": true, + "type": "device_name_mac", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "MAC" + } + ] + }, + { + "column": "Object_SecondaryID", + "mapped_to_column": "cur_IP", + "css_classes": "col-sm-2", + "show": true, + "type": "device_ip", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "IP" + } + ] + }, + { + "column": "Watched_Value1", + "mapped_to_column": "cur_Name", + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Name" + } + ] + }, + { + "column": "Watched_Value2", + "mapped_to_column": "cur_Vendor", + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Vendor" + } + ] + }, + { + "column": "Watched_Value3", + "mapped_to_column": "cur_Type", + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Device Type" + } + ] + }, + { + "column": "Watched_Value4", + "css_classes": "col-sm-2", + "show": false, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "N/A" + } + ] + }, + { + "column": "Dummy", + "mapped_to_column": "cur_ScanMethod", + "mapped_to_column_data": { + "value": "Freebox" + }, + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Scan method" + } + ] + }, + { + "column": "DateTimeCreated", + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Created" + } + ] + }, + { + "column": "DateTimeChanged", + "css_classes": "col-sm-2", + "show": true, + "type": "label", + "default_value": "", + "options": [], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Changed" + } + ] + }, + { + "column": "Status", + "css_classes": "col-sm-1", + "show": true, + "type": "replace", + "default_value": "", + "options": [ + { + "equals": "watched-not-changed", + "replacement": "
" + }, + { + "equals": "watched-changed", + "replacement": "
" + }, + { + "equals": "new", + "replacement": "
" + }, + { + "equals": "missing-in-last-scan", + "replacement": "
" + } + ], + "localized": [ + "name" + ], + "name": [ + { + "language_code": "en_us", + "string": "Status" + } + ] + } + ] +} \ No newline at end of file diff --git a/front/plugins/freebox/freebox.py b/front/plugins/freebox/freebox.py new file mode 100644 index 00000000..593345be --- /dev/null +++ b/front/plugins/freebox/freebox.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +import os +import pathlib +import sys +import json +import sqlite3 +from pytz import timezone +import asyncio +from datetime import datetime +from pathlib import Path +from typing import cast +import socket +import aiofreepybox +from aiofreepybox import Freepybox +from aiofreepybox.api.lan import Lan +from aiofreepybox.exceptions import NotOpenError, AuthorizationError + +# Define the installation path and extend the system path for plugin imports +INSTALL_PATH = "/app" +sys.path.extend([f"{INSTALL_PATH}/front/plugins", f"{INSTALL_PATH}/server"]) + +from plugin_helper import Plugin_Object, Plugin_Objects, decodeBase64 +from plugin_utils import get_plugins_configs +from logger import mylog +from const import pluginsPath, fullDbPath +from helper import timeNowTZ, get_setting_value +from notification import write_notification +import conf + +# Make sure the TIMEZONE for logging is correct +conf.tz = timezone(get_setting_value("TIMEZONE")) + +# Define the current path and log file paths +CUR_PATH = str(Path(__file__).parent.resolve()) +LOG_FILE = os.path.join(CUR_PATH, "script.log") +RESULT_FILE = os.path.join(CUR_PATH, "last_result.log") + +# Initialize the Plugin obj output file +plugin_objects = Plugin_Objects(RESULT_FILE) + +pluginName = "FREEBOX" + +device_type_map = { + "workstation": "PC", + "laptop": "Laptop", + "smartphone": "Smartphone", + "tablet": "Tablet", + "printer": "Printer", + "vg_console": "Game Console", + "television": "SmartTV", + "nas": "NAS", + "ip_camera": "IP Camera", + "ip_phone": "Phone", + "freebox_player": "TV Decoder", + "freebox_hd": "TV Decoder", + "freebox_crystal": "TV Decoder", + "freebox_mini": "TV Decoder", + "freebox_delta": "Gateway", + "freebox_one": "Gateway", + "freebox_wifi": "Gateway", + "freebox_pop": "AP", + "networking_device": "Router", + "multimedia_device": "TV Decoder", + "car": "House Appliance", + "other": "(Unknown)", +} + + +def map_device_type(type: str): + return device_type_map[type] + + +async def get_device_data(api_version: int, api_address: str, api_port: int): + # ensure existence of db path + data_dir = Path("/app/config/freeboxdb") + data_dir.mkdir(parents=True, exist_ok=True) + + # Instantiate Freepybox class using default application descriptor + # and custom token_file location + fbx = Freepybox( + app_desc={ + "app_id": "netalertx", + "app_name": "NetAlertX", + "app_version": aiofreepybox.__version__, + "device_name": socket.gethostname(), + }, + api_version="v" + str(api_version), + data_dir=data_dir, + ) + + # Connect to the freebox + # Be ready to authorize the application on the Freebox if you run this + # for the first time + try: + await fbx.open(host=api_address, port=api_port) + except NotOpenError as e: + mylog("verbose", [f"[{pluginName}] Error connecting to freebox: {e}"]) + except AuthorizationError as e: + mylog("verbose", [f"[{pluginName}] Auth error: {str(e)}"]) + + # get also info of the freebox itself + config = await fbx.system.get_config() + freebox = await cast(Lan, fbx.lan).get_config() + hosts = await cast(Lan, fbx.lan).get_hosts_list() + assert config is not None + assert freebox is not None + freebox["mac"] = config["mac"] + freebox["operator"] = config["model_info"]["net_operator"] + + # Close the freebox session + await fbx.close() + + return freebox, hosts + + +def main(): + mylog("verbose", [f"[{pluginName}] In script"]) + + # Retrieve configuration settings + api_settings = { + "api_address": get_setting_value("FREEBOX_address"), + "api_version": get_setting_value("FREEBOX_api_version"), + "api_port": get_setting_value("FREEBOX_api_port"), + } + + mylog("verbose", [f"[{pluginName}] Settings: {api_settings}"]) + + # retrieve data + loop = asyncio.new_event_loop() + freebox, hosts = loop.run_until_complete(get_device_data(**api_settings)) + loop.close() + + mylog("verbose", [freebox]) + mylog("verbose", [hosts]) + + plugin_objects.add_object( + primaryId=freebox["mac"], + secondaryId=freebox["ip"], + watched1=freebox["name"], + watched2=freebox["operator"], + watched3="Gateway", + watched4=datetime.now, + extra="", + foreignKey=freebox["mac"], + ) + for host in hosts: + for ip in [ip for ip in host["l3connectivities"] if ip["reachable"]]: + mac: str = host["l2ident"]["id"] + plugin_objects.add_object( + primaryId=mac, + secondaryId=ip["addr"], + watched1=host["primary_name"], + watched2=host["vendor_name"] if host["vendor_name"] else "(unknown)", + watched3=map_device_type(host["host_type"]), + watched4=datetime.fromtimestamp(ip["last_time_reachable"]), + extra="", + foreignKey=mac, + ) + + # commit result + plugin_objects.write_result_file() + + return 0 + + +if __name__ == "__main__": + main() From 9a82d93f11305e30bb3882feb0fa16478f30f389 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Sat, 30 Nov 2024 01:41:45 +0100 Subject: [PATCH 2/7] Added README for the FREEBOX plugin --- front/plugins/freebox/README.md | 51 +++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/front/plugins/freebox/README.md b/front/plugins/freebox/README.md index 4c0aa412..d7a90657 100644 --- a/front/plugins/freebox/README.md +++ b/front/plugins/freebox/README.md @@ -1,23 +1,50 @@ ## Overview -Plugin functionality overview and links to external resources if relevant. Include use cases if available. +Plugin to pull devices, IPs, and their names from a Freebox gateway. -> [!TIP] -> Some tip. +### Pairing -### Quick setup guide +Requirements: +- Physical access to the Freebox +- Network access to the same lan as the Freebox -To set up the plugin correctly, make sure... +Regardless of which setup you will choose, you will first need to pair NetAlertX to your Freebox. To pair, the device running NetAlertX *must* be connected on the same lan as the Freebox. After pairing, the device can access your Freebox even from the Internet (se [remote setup](#remote-setup)). -#### Required Settings +To pair, you can leave the settings to their default values (same as [quick setup](#quick-setup)), though other configurations will work as well if you can't use the default one. -- When to run `PREF_RUN` -- +When you run the plugin the first time, it will send a pairing request to the Freebox, if you look at the logs you will see a message saying to *"Continue the pairing on your Freebox"*. At this point, on the front panel of the Freebox you will see an authorization request, confirm it using the buttons on the front panel to complete the pairing. +If you don't see the message on the logs, something is preventing the plugin from running. -### Usage +Note: You can screen and revoke any previous authorization (completed or attempted) from the web interface of your Freebox. -- Head to **Settings** > **Plugin name** to adjust the default values. +### Quick setup -### Notes +Note: read [pairing](#pairing) first. -- Additional notes, limitations, Author info. \ No newline at end of file +By default the plugin will connect to the address `mafreebox.freebox.fr` on the HTTPS port `443`. This will work in most cases, but has some limitations. + +Limitations: +- It requires internet access +- The Freebox must be your gateway +- The device must be in the same lan as the Freebox + +### Offline setup (recommended) + +Use this configuration if you wish to connect to your Freebox even when you are offline, or the Freebox is not your gateway. + +Find the local IP address of your Freebox, if it is your gateway, you can find the address on your computer/smartphone network configuration (usually it's `192.168.1.1`). Go in the plugin settings and set the IP as address and `80` as the port (do *not* use `443` as the port). This configuration works regardless of your internet connection and poses little limitations. + +Limitations: +- *If* there is no internet connection, the plugin will fallback to HTTP (not HTTPS) + +For more detail: the plugin will connect to the specified address and port to fetch information about the Freebox, then it will either connect in HTTPS through the Freebox's unique domain name, or connect over HTTP if there is no internet connection. The freebox does offer an HTTPS port on the local network, but the certificate will be invalid for the local IP, and the connection will be aborted. + +### Remote setup + +Use this configuration if you wish to connect to your Freebox through the internet. You still need to pair from the local network. + +If the Freebox is not your gateway, configure a NAT and follow the [offline setup](#offline-setup-recommended). + +If the Freebox is your gateway you need to find its HTTPS (or HTTP if you prefer) public port. This can be found either in the Freeboxe's web interface and by navigating to `settings>access management`, or (just for the HTTPS port) by visiting http://mafreebox.freebox.fr:80/api_version from the local network (you can use the local ip as well). This is the port you need to access your Freebox through the internet + +As address, you can either use the public IP of the Freebox, or the unique domain name you found on http://mafreebox.freebox.fr:80/api_version listed as `api_domain`. \ No newline at end of file From 4e27a0df9ee199ac1c1b7d7423fae4c8ae2968f4 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Sat, 30 Nov 2024 11:27:04 +0100 Subject: [PATCH 3/7] Changed description of a setting for the FREEBOX plugin --- front/plugins/freebox/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/plugins/freebox/config.json b/front/plugins/freebox/config.json index f04cae74..fc3ced3c 100644 --- a/front/plugins/freebox/config.json +++ b/front/plugins/freebox/config.json @@ -211,7 +211,7 @@ "description": [ { "language_code": "en_us", - "string": "Port for remote HTTP(S) access. This will be different for your device." + "string": "Port for HTTP(S) access. This might be different for your device, more info in the plugin documentation." } ] }, From 6cb56525f3f39f9f5ba0e257a83e65f5ba98795e Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Sat, 30 Nov 2024 11:31:05 +0100 Subject: [PATCH 4/7] Added the FREEBOX plugin to the plugin table --- front/plugins/README.md | 94 ++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/front/plugins/README.md b/front/plugins/README.md index ee13e064..0dd0e74d 100755 --- a/front/plugins/README.md +++ b/front/plugins/README.md @@ -23,42 +23,42 @@ NetAlertX supports additional plugins to extend its functionality, each with its Device-detecting plugins insert values into the `CurrentScan` database table. The plugins that are not required are safe to ignore, however, it makes sense to have at least some device-detecting plugins enabled, such as `ARPSCAN` or `NMAPDEV`. -| ID | Type | Description | Features | Required | Data source | Detailed docs | -|---------------|---------|--------------------------------------------|----------|----------|--------------------|---------------------------------------------------------------| -| `APPRISE` | ▢️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) | -| `ARPSCAN` | πŸ” | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) | -| `AVAHISCAN` | β™» | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](/front/plugins/avahi_scan/) | -| `CSVBCKP` | βš™ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) | -| `DBCLNP` | βš™ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) | -| `DDNS` | βš™ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) | -| `DHCPLSS` | πŸ”/πŸ“₯ | Import devices from DHCP leases | | | Script | [dhcp_leases](/front/plugins/dhcp_leases/) | -| `DHCPSRVS` | β™» | DHCP servers | | | Script | [dhcp_servers](/front/plugins/dhcp_servers/) | -| `INTRNT` | πŸ” | Internet IP scanner | | | Script | [internet_ip](/front/plugins/internet_ip/) | -| `INTRSPD` | β™» | Internet speed test | | | Script | [internet_speedtest](/front/plugins/internet_speedtest/) | -| `MAINT` | βš™ | Maintenance of logs, etc. | | | Script | [maintenance](/front/plugins/maintenance/) | -| `MQTT` | ▢️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](/front/plugins/_publisher_mqtt/) | -| `NBTSCAN` | β™» | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](/front/plugins/nbtscan_scan/) | -| `NEWDEV` | βš™ | New device template | | Yes | Template | [newdev_template](/front/plugins/newdev_template/) | -| `NMAP` | β™» | Nmap port scanning & discovery | | | Script | [nmap_scan](/front/plugins/nmap_scan/) | -| `NMAPDEV` | πŸ” | Nmap dev scan on current network | | | Script | [nmap_dev_scan](/front/plugins/nmap_dev_scan/) | -| `NSLOOKUP` | β™» | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](/front/plugins/nslookup_scan/) | -| `NTFPRCS` | βš™ | Notification processing | | Yes | Template | [notification_processing](/front/plugins/notification_processing/)| -| `NTFY` | ▢️ | NTFY notifications | | | Script | [_publisher_ntfy](/front/plugins/_publisher_ntfy/) | -| `OMDSDN` | πŸ“₯ | OMADA TP-Link import | πŸ–§ πŸ”„ | | Script | [omada_sdn_imp](/front/plugins/omada_sdn_imp/) | -| `PIHOLE` | πŸ”/πŸ“₯ | Pi-hole device import & sync | | | SQLite DB | [pihole_scan](/front/plugins/pihole_scan/) | -| `PUSHSAFER` | ▢️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](/front/plugins/_publisher_pushsafer/) | -| `PUSHOVER` | ▢️ | Pushover notifications | | | Script | [_publisher_pushover](/front/plugins/_publisher_pushover/) | -| `SETPWD` | βš™ | Set password | | Yes | Template | [set_password](/front/plugins/set_password/) | -| `SMTP` | ▢️ | Email notifications | | | Script | [_publisher_email](/front/plugins/_publisher_email/) | -| `SNMPDSC` | πŸ”/πŸ“₯ | SNMP device import & sync | | | Script | [snmp_discovery](/front/plugins/snmp_discovery/) | -| `SYNC` | πŸ”/βš™/πŸ“₯| Sync & import from NetAlertX instances | πŸ–§ πŸ”„ | | Script | [sync](/front/plugins/sync/) | -| `TELEGRAM` | ▢️ | Telegram notifications | | | Script | [_publisher_telegram](/front/plugins/_publisher_telegram/) | -| `UNDIS` | πŸ”/πŸ“₯ | Create dummy devices | | | Script | [undiscoverables](/front/plugins/undiscoverables/) | -| `UNFIMP` | πŸ”/πŸ“₯ | UniFi device import & sync | πŸ–§ | | Script | [unifi_import](/front/plugins/unifi_import/) | -| `VNDRPDT` | βš™ | Vendor database update | | | Script | [vendor_update](/front/plugins/vendor_update/) | -| `WEBHOOK` | ▢️ | Webhook notifications | | | Script | [_publisher_webhook](/front/plugins/_publisher_webhook/) | -| `WEBMON` | β™» | Website down monitoring | | | Script | [website_monitor](/front/plugins/website_monitor/) | - +| ID | Type | Description | Features | Required | Data source | Detailed docs | +| ----------- | ----- | ------------------------------------------ | -------- | -------- | ----------- | ------------------------------------------------------------------ | +| `APPRISE` | ▢️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) | +| `ARPSCAN` | πŸ” | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) | +| `AVAHISCAN` | β™» | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](/front/plugins/avahi_scan/) | +| `CSVBCKP` | βš™ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) | +| `DBCLNP` | βš™ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) | +| `DDNS` | βš™ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) | +| `DHCPLSS` | πŸ”/πŸ“₯ | Import devices from DHCP leases | | | Script | [dhcp_leases](/front/plugins/dhcp_leases/) | +| `DHCPSRVS` | β™» | DHCP servers | | | Script | [dhcp_servers](/front/plugins/dhcp_servers/) | +| `INTRNT` | πŸ” | Internet IP scanner | | | Script | [internet_ip](/front/plugins/internet_ip/) | +| `INTRSPD` | β™» | Internet speed test | | | Script | [internet_speedtest](/front/plugins/internet_speedtest/) | +| `MAINT` | βš™ | Maintenance of logs, etc. | | | Script | [maintenance](/front/plugins/maintenance/) | +| `MQTT` | ▢️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](/front/plugins/_publisher_mqtt/) | +| `NBTSCAN` | β™» | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](/front/plugins/nbtscan_scan/) | +| `NEWDEV` | βš™ | New device template | | Yes | Template | [newdev_template](/front/plugins/newdev_template/) | +| `NMAP` | β™» | Nmap port scanning & discovery | | | Script | [nmap_scan](/front/plugins/nmap_scan/) | +| `NMAPDEV` | πŸ” | Nmap dev scan on current network | | | Script | [nmap_dev_scan](/front/plugins/nmap_dev_scan/) | +| `NSLOOKUP` | β™» | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](/front/plugins/nslookup_scan/) | +| `NTFPRCS` | βš™ | Notification processing | | Yes | Template | [notification_processing](/front/plugins/notification_processing/) | +| `NTFY` | ▢️ | NTFY notifications | | | Script | [_publisher_ntfy](/front/plugins/_publisher_ntfy/) | +| `OMDSDN` | πŸ“₯ | OMADA TP-Link import | πŸ–§ πŸ”„ | | Script | [omada_sdn_imp](/front/plugins/omada_sdn_imp/) | +| `PIHOLE` | πŸ”/πŸ“₯ | Pi-hole device import & sync | | | SQLite DB | [pihole_scan](/front/plugins/pihole_scan/) | +| `PUSHSAFER` | ▢️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](/front/plugins/_publisher_pushsafer/) | +| `PUSHOVER` | ▢️ | Pushover notifications | | | Script | [_publisher_pushover](/front/plugins/_publisher_pushover/) | +| `SETPWD` | βš™ | Set password | | Yes | Template | [set_password](/front/plugins/set_password/) | +| `SMTP` | ▢️ | Email notifications | | | Script | [_publisher_email](/front/plugins/_publisher_email/) | +| `SNMPDSC` | πŸ”/πŸ“₯ | SNMP device import & sync | | | Script | [snmp_discovery](/front/plugins/snmp_discovery/) | +| `SYNC` | πŸ”/βš™/πŸ“₯ | Sync & import from NetAlertX instances | πŸ–§ πŸ”„ | | Script | [sync](/front/plugins/sync/) | +| `TELEGRAM` | ▢️ | Telegram notifications | | | Script | [_publisher_telegram](/front/plugins/_publisher_telegram/) | +| `UNDIS` | πŸ”/πŸ“₯ | Create dummy devices | | | Script | [undiscoverables](/front/plugins/undiscoverables/) | +| `UNFIMP` | πŸ”/πŸ“₯ | UniFi device import & sync | πŸ–§ | | Script | [unifi_import](/front/plugins/unifi_import/) | +| `VNDRPDT` | βš™ | Vendor database update | | | Script | [vendor_update](/front/plugins/vendor_update/) | +| `WEBHOOK` | ▢️ | Webhook notifications | | | Script | [_publisher_webhook](/front/plugins/_publisher_webhook/) | +| `WEBMON` | β™» | Website down monitoring | | | Script | [website_monitor](/front/plugins/website_monitor/) | +| `FREEBOX` | πŸ”/β™» | Pull data and names from a Freebox gateway | | | Script | [freebox](/front/plugins/freebox/) | > \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed. > @@ -69,20 +69,20 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T ## Plugin types -| Plugin type | Icon | Description | When to run | Required | Data source [?](/docs/PLUGINS_DEV.md) | -|---------------|------|----------------------------------------------------------------|--------------------------|----|---------| -| publisher | ▢️ | Sending notifications to services. | `on_notification` | βœ– | Script | -| dev scanner | πŸ” | Create devices in the app, manages online/offline device status. | `schedule` | βœ– | Script / SQLite DB | -| importer | πŸ“₯ | Importing devices from another service. | `schedule` | βœ– | Script / SQLite DB | -| system | βš™ | Providing core system functionality. | `schedule` / always on | βœ–/βœ” | Script / Template | -| other | β™» | Other scanners, e.g. for name resolution | misc | βœ– | Script / Template | +| Plugin type | Icon | Description | When to run | Required | Data source [?](/docs/PLUGINS_DEV.md) | +| ----------- | ---- | ---------------------------------------------------------------- | ---------------------- | -------- | ------------------------------------- | +| publisher | ▢️ | Sending notifications to services. | `on_notification` | βœ– | Script | +| dev scanner | πŸ” | Create devices in the app, manages online/offline device status. | `schedule` | βœ– | Script / SQLite DB | +| importer | πŸ“₯ | Importing devices from another service. | `schedule` | βœ– | Script / SQLite DB | +| system | βš™ | Providing core system functionality. | `schedule` / always on | βœ–/βœ” | Script / Template | +| other | β™» | Other scanners, e.g. for name resolution | misc | βœ– | Script / Template | ## Features -| Icon | Description | -|------|---------------------------------------------------------------| -| πŸ–§ | Auto-imports the network topology diagram | -| πŸ”„ | Has the option to sync some data back into the plugin source | +| Icon | Description | +| ---- | ------------------------------------------------------------ | +| πŸ–§ | Auto-imports the network topology diagram | +| πŸ”„ | Has the option to sync some data back into the plugin source | ## βœ…Enabling plugins From 6b00d5339d5ea6801d31bfec026aa619021a007f Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Mon, 2 Dec 2024 00:09:16 +0100 Subject: [PATCH 5/7] Added dependency for FREEBOX in DOCKERFILE --- Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d8e5307..c711673f 100755 --- a/Dockerfile +++ b/Dockerfile @@ -5,9 +5,8 @@ ARG INSTALL_DIR=/app ENV PYTHONUNBUFFERED=1 # Install build dependencies -RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev \ +RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev git\ && python -m venv /opt/venv - # Enable venv ENV PATH="/opt/venv/bin:$PATH" @@ -57,6 +56,6 @@ COPY install/crontab /etc/crontabs/root RUN ${INSTALL_DIR}/dockerfiles/pre-setup.sh HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=2 \ - CMD curl -sf -o /dev/null ${LISTEN_ADDR}:${PORT}/api/app_state.json + CMD curl -sf -o /dev/null ${LISTEN_ADDR}:${PORT}/api/app_state.json ENTRYPOINT ["/init"] From ae2f898b39aa9e5e61b2cb7130b8bfaf8ff20c79 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Mon, 2 Dec 2024 00:14:34 +0100 Subject: [PATCH 6/7] Added the Iliad certificate for Iliadbox support in the FREEBOX plugin --- Dockerfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Dockerfile b/Dockerfile index c711673f..fed5d18e 100755 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,22 @@ RUN pip install graphene flask netifaces tplink-omada-client pycryptodome reques && bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;" +# Append Iliadbox certificate to aiofreepybox +RUN printf "\n-----BEGIN CERTIFICATE-----\n\ +MIICOjCCAcCgAwIBAgIUI0Tu7zsrBJACQIZgLMJobtbdNn4wCgYIKoZIzj0EAwIw\n\ +TDELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUl0YWx5MQ4wDAYDVQQKDAVJbGlhZDEd\n\ +MBsGA1UEAwwUSWxpYWRib3ggRUNDIFJvb3QgQ0EwHhcNMjAxMTI3MDkzODEzWhcN\n\ +NDAxMTIyMDkzODEzWjBMMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFSXRhbHkxDjAM\n\ +BgNVBAoMBUlsaWFkMR0wGwYDVQQDDBRJbGlhZGJveCBFQ0MgUm9vdCBDQTB2MBAG\n\ +ByqGSM49AgEGBSuBBAAiA2IABMryJyb2loHNAioY8IztN5MI3UgbVHVP/vZwcnre\n\ +ZvJOyDvE4HJgIti5qmfswlnMzpNbwf/MkT+7HAU8jJoTorRm1wtAnQ9cWD3Ebv79\n\ +RPwtjjy3Bza3SgdVxmd6fWPUKaNjMGEwHQYDVR0OBBYEFDUij/4lpoJ+kOXRyrcM\n\ +jf2RPzOqMB8GA1UdIwQYMBaAFDUij/4lpoJ+kOXRyrcMjf2RPzOqMA8GA1UdEwEB\n\ +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQC6eUV1\n\ +pFh4UpJOTc1JToztN4ttnQR6rIzxMZ6mNCe+nhjkohWp24pr7BpUYSbEizYCMAQ6\n\ +LCiBKV2j7QQGy7N1aBmdur17ZepYzR1YV0eI+Kd978aZggsmhjXENQYVTmm/XA==\n\ +-----END CERTIFICATE-----\n" >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem + # second stage FROM alpine:3.20 AS runner From 12f2d12d522560c214c41517cfcfd637549e0d38 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Mon, 2 Dec 2024 00:17:32 +0100 Subject: [PATCH 7/7] Updated FREEBOX documentation to mention the Iliadbox gateway --- front/plugins/README.md | 72 ++++++++++++++++----------------- front/plugins/freebox/README.md | 4 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/front/plugins/README.md b/front/plugins/README.md index 0dd0e74d..015d8545 100755 --- a/front/plugins/README.md +++ b/front/plugins/README.md @@ -23,42 +23,42 @@ NetAlertX supports additional plugins to extend its functionality, each with its Device-detecting plugins insert values into the `CurrentScan` database table. The plugins that are not required are safe to ignore, however, it makes sense to have at least some device-detecting plugins enabled, such as `ARPSCAN` or `NMAPDEV`. -| ID | Type | Description | Features | Required | Data source | Detailed docs | -| ----------- | ----- | ------------------------------------------ | -------- | -------- | ----------- | ------------------------------------------------------------------ | -| `APPRISE` | ▢️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) | -| `ARPSCAN` | πŸ” | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) | -| `AVAHISCAN` | β™» | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](/front/plugins/avahi_scan/) | -| `CSVBCKP` | βš™ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) | -| `DBCLNP` | βš™ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) | -| `DDNS` | βš™ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) | -| `DHCPLSS` | πŸ”/πŸ“₯ | Import devices from DHCP leases | | | Script | [dhcp_leases](/front/plugins/dhcp_leases/) | -| `DHCPSRVS` | β™» | DHCP servers | | | Script | [dhcp_servers](/front/plugins/dhcp_servers/) | -| `INTRNT` | πŸ” | Internet IP scanner | | | Script | [internet_ip](/front/plugins/internet_ip/) | -| `INTRSPD` | β™» | Internet speed test | | | Script | [internet_speedtest](/front/plugins/internet_speedtest/) | -| `MAINT` | βš™ | Maintenance of logs, etc. | | | Script | [maintenance](/front/plugins/maintenance/) | -| `MQTT` | ▢️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](/front/plugins/_publisher_mqtt/) | -| `NBTSCAN` | β™» | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](/front/plugins/nbtscan_scan/) | -| `NEWDEV` | βš™ | New device template | | Yes | Template | [newdev_template](/front/plugins/newdev_template/) | -| `NMAP` | β™» | Nmap port scanning & discovery | | | Script | [nmap_scan](/front/plugins/nmap_scan/) | -| `NMAPDEV` | πŸ” | Nmap dev scan on current network | | | Script | [nmap_dev_scan](/front/plugins/nmap_dev_scan/) | -| `NSLOOKUP` | β™» | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](/front/plugins/nslookup_scan/) | -| `NTFPRCS` | βš™ | Notification processing | | Yes | Template | [notification_processing](/front/plugins/notification_processing/) | -| `NTFY` | ▢️ | NTFY notifications | | | Script | [_publisher_ntfy](/front/plugins/_publisher_ntfy/) | -| `OMDSDN` | πŸ“₯ | OMADA TP-Link import | πŸ–§ πŸ”„ | | Script | [omada_sdn_imp](/front/plugins/omada_sdn_imp/) | -| `PIHOLE` | πŸ”/πŸ“₯ | Pi-hole device import & sync | | | SQLite DB | [pihole_scan](/front/plugins/pihole_scan/) | -| `PUSHSAFER` | ▢️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](/front/plugins/_publisher_pushsafer/) | -| `PUSHOVER` | ▢️ | Pushover notifications | | | Script | [_publisher_pushover](/front/plugins/_publisher_pushover/) | -| `SETPWD` | βš™ | Set password | | Yes | Template | [set_password](/front/plugins/set_password/) | -| `SMTP` | ▢️ | Email notifications | | | Script | [_publisher_email](/front/plugins/_publisher_email/) | -| `SNMPDSC` | πŸ”/πŸ“₯ | SNMP device import & sync | | | Script | [snmp_discovery](/front/plugins/snmp_discovery/) | -| `SYNC` | πŸ”/βš™/πŸ“₯ | Sync & import from NetAlertX instances | πŸ–§ πŸ”„ | | Script | [sync](/front/plugins/sync/) | -| `TELEGRAM` | ▢️ | Telegram notifications | | | Script | [_publisher_telegram](/front/plugins/_publisher_telegram/) | -| `UNDIS` | πŸ”/πŸ“₯ | Create dummy devices | | | Script | [undiscoverables](/front/plugins/undiscoverables/) | -| `UNFIMP` | πŸ”/πŸ“₯ | UniFi device import & sync | πŸ–§ | | Script | [unifi_import](/front/plugins/unifi_import/) | -| `VNDRPDT` | βš™ | Vendor database update | | | Script | [vendor_update](/front/plugins/vendor_update/) | -| `WEBHOOK` | ▢️ | Webhook notifications | | | Script | [_publisher_webhook](/front/plugins/_publisher_webhook/) | -| `WEBMON` | β™» | Website down monitoring | | | Script | [website_monitor](/front/plugins/website_monitor/) | -| `FREEBOX` | πŸ”/β™» | Pull data and names from a Freebox gateway | | | Script | [freebox](/front/plugins/freebox/) | +| ID | Type | Description | Features | Required | Data source | Detailed docs | +| ----------- | ----- | --------------------------------------------------- | -------- | -------- | ----------- | ------------------------------------------------------------------ | +| `APPRISE` | ▢️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) | +| `ARPSCAN` | πŸ” | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) | +| `AVAHISCAN` | β™» | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](/front/plugins/avahi_scan/) | +| `CSVBCKP` | βš™ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) | +| `DBCLNP` | βš™ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) | +| `DDNS` | βš™ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) | +| `DHCPLSS` | πŸ”/πŸ“₯ | Import devices from DHCP leases | | | Script | [dhcp_leases](/front/plugins/dhcp_leases/) | +| `DHCPSRVS` | β™» | DHCP servers | | | Script | [dhcp_servers](/front/plugins/dhcp_servers/) | +| `INTRNT` | πŸ” | Internet IP scanner | | | Script | [internet_ip](/front/plugins/internet_ip/) | +| `INTRSPD` | β™» | Internet speed test | | | Script | [internet_speedtest](/front/plugins/internet_speedtest/) | +| `MAINT` | βš™ | Maintenance of logs, etc. | | | Script | [maintenance](/front/plugins/maintenance/) | +| `MQTT` | ▢️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](/front/plugins/_publisher_mqtt/) | +| `NBTSCAN` | β™» | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](/front/plugins/nbtscan_scan/) | +| `NEWDEV` | βš™ | New device template | | Yes | Template | [newdev_template](/front/plugins/newdev_template/) | +| `NMAP` | β™» | Nmap port scanning & discovery | | | Script | [nmap_scan](/front/plugins/nmap_scan/) | +| `NMAPDEV` | πŸ” | Nmap dev scan on current network | | | Script | [nmap_dev_scan](/front/plugins/nmap_dev_scan/) | +| `NSLOOKUP` | β™» | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](/front/plugins/nslookup_scan/) | +| `NTFPRCS` | βš™ | Notification processing | | Yes | Template | [notification_processing](/front/plugins/notification_processing/) | +| `NTFY` | ▢️ | NTFY notifications | | | Script | [_publisher_ntfy](/front/plugins/_publisher_ntfy/) | +| `OMDSDN` | πŸ“₯ | OMADA TP-Link import | πŸ–§ πŸ”„ | | Script | [omada_sdn_imp](/front/plugins/omada_sdn_imp/) | +| `PIHOLE` | πŸ”/πŸ“₯ | Pi-hole device import & sync | | | SQLite DB | [pihole_scan](/front/plugins/pihole_scan/) | +| `PUSHSAFER` | ▢️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](/front/plugins/_publisher_pushsafer/) | +| `PUSHOVER` | ▢️ | Pushover notifications | | | Script | [_publisher_pushover](/front/plugins/_publisher_pushover/) | +| `SETPWD` | βš™ | Set password | | Yes | Template | [set_password](/front/plugins/set_password/) | +| `SMTP` | ▢️ | Email notifications | | | Script | [_publisher_email](/front/plugins/_publisher_email/) | +| `SNMPDSC` | πŸ”/πŸ“₯ | SNMP device import & sync | | | Script | [snmp_discovery](/front/plugins/snmp_discovery/) | +| `SYNC` | πŸ”/βš™/πŸ“₯ | Sync & import from NetAlertX instances | πŸ–§ πŸ”„ | | Script | [sync](/front/plugins/sync/) | +| `TELEGRAM` | ▢️ | Telegram notifications | | | Script | [_publisher_telegram](/front/plugins/_publisher_telegram/) | +| `UNDIS` | πŸ”/πŸ“₯ | Create dummy devices | | | Script | [undiscoverables](/front/plugins/undiscoverables/) | +| `UNFIMP` | πŸ”/πŸ“₯ | UniFi device import & sync | πŸ–§ | | Script | [unifi_import](/front/plugins/unifi_import/) | +| `VNDRPDT` | βš™ | Vendor database update | | | Script | [vendor_update](/front/plugins/vendor_update/) | +| `WEBHOOK` | ▢️ | Webhook notifications | | | Script | [_publisher_webhook](/front/plugins/_publisher_webhook/) | +| `WEBMON` | β™» | Website down monitoring | | | Script | [website_monitor](/front/plugins/website_monitor/) | +| `FREEBOX` | πŸ”/β™» | Pull data and names from a Freebox/Iliadbox gateway | | | Script | [freebox](/front/plugins/freebox/) | > \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed. > diff --git a/front/plugins/freebox/README.md b/front/plugins/freebox/README.md index d7a90657..6038db02 100644 --- a/front/plugins/freebox/README.md +++ b/front/plugins/freebox/README.md @@ -1,6 +1,6 @@ ## Overview -Plugin to pull devices, IPs, and their names from a Freebox gateway. +Plugin to pull devices, IPs, and their names from a Freebox or Iliadbox gateway. ### Pairing @@ -21,7 +21,7 @@ Note: You can screen and revoke any previous authorization (completed or attempt Note: read [pairing](#pairing) first. -By default the plugin will connect to the address `mafreebox.freebox.fr` on the HTTPS port `443`. This will work in most cases, but has some limitations. +By default the plugin will connect to the address `mafreebox.freebox.fr` on the HTTPS port `443`, if you have an Iliadbox, replace the address with `myiliadbox.iliad.it`. This will work in most cases, but has some limitations. Limitations: - It requires internet access