Commit Graph

3421 Commits

Author SHA1 Message Date
Bekir Kayra Çiğdem
553def362a Translated using Weblate (Turkish)
Currently translated at 55.6% (449 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/tr/
2026-04-15 22:10:02 +02:00
mid
f70c125f2c Translated using Weblate (Japanese)
Currently translated at 99.5% (803 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ja/
2026-04-15 22:10:00 +02:00
Marco Rios
3bce0701d3 Translated using Weblate (Spanish)
Currently translated at 96.9% (782 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2026-04-15 22:09:59 +02:00
Massimo Pissarello
e91f5ad539 Translated using Weblate (Italian)
Currently translated at 100.0% (807 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2026-04-15 22:09:56 +02:00
anton garcias
975f64353d Translated using Weblate (Catalan)
Currently translated at 99.3% (802 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2026-04-15 22:09:55 +02:00
Anonymous
ff73f62f9e Translated using Weblate (Portuguese (Brazil))
Currently translated at 50.1% (405 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2026-04-15 22:09:54 +02:00
kkumakuma
142813963b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.1% (784 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2026-04-15 22:09:53 +02:00
Максим Горпиніч
366df94c9e Translated using Weblate (Ukrainian)
Currently translated at 96.2% (777 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2026-04-15 22:09:50 +02:00
Ettore Atalan
11a7ac1170 Translated using Weblate (German)
Currently translated at 80.4% (649 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2026-04-15 22:09:49 +02:00
Jokob @NetAlertX
285bd3ec22 Enhance device filters: support label for dropdown options and improve SQL queries #1611 2026-04-14 20:38:37 +00:00
jokob-sk
090b7e038a Merge branch 'main' of github.com:netalertx/NetAlertX
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
2026-04-15 05:51:37 +10:00
jokob-sk
4267a5c30c FE+BE: Filters
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-15 05:51:04 +10:00
Artyom Rybakov
3fc9ddd637 Translated using Weblate (Russian)
Currently translated at 100.0% (807 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2026-04-14 18:11:41 +02:00
António Oliveira
f6b4965791 Translated using Weblate (Portuguese (Portugal))
Some checks failed
✅ Code checks / docker-tests (push) Has been cancelled
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
Currently translated at 77.6% (627 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_PT/
2026-04-14 02:09:49 +02:00
Massimo Pissarello
f8fc7e6e91 Translated using Weblate (Italian)
Currently translated at 100.0% (807 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2026-04-14 02:09:48 +02:00
Sylvain Pichon
976cbccfca Translated using Weblate (French)
Currently translated at 99.7% (805 of 807 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2026-04-14 02:09:48 +02:00
Jokob @NetAlertX
79a9e9f8a3 Merge pull request #1610 from netalertx/next_release
Some checks failed
✅ Code checks / docker-tests (push) Has been cancelled
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
FIX: Add 'No Data' message for empty plugin tabs and enhance event da…
2026-04-13 08:36:22 +10:00
Jokob @NetAlertX
b0c687a171 PLG: Add 'No Data' message for empty plugin tabs and enhance event data loading checks #1607 2026-04-12 22:28:53 +00:00
Jokob @NetAlertX
36174a8cd9 Merge pull request #1608 from netalertx/next_release
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
PLG: Enhance IP sorting in device table for correct numeric order #1606
2026-04-12 10:36:36 +10:00
Jokob @NetAlertX
309315defc PLG: Enhance IP sorting in device table for correct numeric order #1606
Some checks failed
🐳 ⚠ docker-unsafe from next_release branch / docker_dev_unsafe (push) Has been cancelled
2026-04-12 00:33:15 +00:00
jokob-sk
686a1c8ddb DOCS: setting string
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-12 10:25:10 +10:00
Jokob @NetAlertX
51b8cf03b5 Refactor guest WiFi device creation to use a sentinel MAC address fallback
Some checks failed
🐳 ⚠ docker-unsafe from next_release branch / docker_dev_unsafe (push) Has been cancelled
2026-04-10 22:40:57 +00:00
jokob-sk
c40d04b2c4 PLG: AppEvents not clearing in DBCLNP
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-10 22:10:00 +10:00
Deleted User
ab45f28027 Translated using Weblate (Ukrainian)
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
Currently translated at 96.5% (778 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2026-04-09 00:10:16 +00:00
Adam Stańczyk
03891dd78d Translated using Weblate (Polish)
Currently translated at 83.7% (675 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2026-04-09 00:10:14 +00:00
mid
9e605a593d Translated using Weblate (Japanese)
Currently translated at 99.7% (804 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ja/
2026-04-09 00:10:12 +00:00
Deleted User
8230b2380c Translated using Weblate (German)
Currently translated at 80.5% (649 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2026-04-09 00:10:09 +00:00
Deleted User
0c6f5b223f Translated using Weblate (Spanish)
Currently translated at 97.1% (783 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2026-04-09 00:10:07 +00:00
Ptsa Daniel
924d70d267 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.3% (785 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2026-04-09 00:10:05 +00:00
GoldBull3t
33c3e2fef7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 50.2% (405 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2026-04-09 00:10:02 +00:00
HAMAD ABDULLA
940cd503d3 Translated using Weblate (Arabic)
Currently translated at 83.9% (677 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ar/
2026-04-09 00:10:00 +00:00
Massimo Pissarello
0e862845f4 Translated using Weblate (Italian)
Currently translated at 100.0% (806 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2026-04-09 00:09:58 +00:00
Bekir Kayra Çiğdem
68e5b3c877 Translated using Weblate (Turkish)
Currently translated at 55.8% (450 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/tr/
2026-04-09 00:09:56 +00:00
Safeguard
7827e24aae Translated using Weblate (Russian)
Currently translated at 99.7% (804 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2026-04-09 00:09:52 +00:00
Sylvain Pichon
3ff128e1f5 Translated using Weblate (French)
Currently translated at 99.5% (802 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2026-04-09 00:09:50 +00:00
jokob-sk
b96b170bed Merge branch 'main' of github.com:netalertx/NetAlertX
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
2026-04-08 09:41:26 +10:00
jokob-sk
da9c5f1bc7 DOCS: typos #1596
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-08 09:41:19 +10:00
anton garcias
2e8b793b44 Translated using Weblate (Catalan)
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
Currently translated at 99.8% (805 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2026-04-07 18:54:29 +02:00
António Oliveira
3c8fd72049 Translated using Weblate (Portuguese (Portugal))
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
Currently translated at 73.5% (593 of 806 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_PT/
2026-04-07 05:34:53 +02:00
Jokob @NetAlertX
ae089f5ad9 Merge pull request #1592 from sebingel/fritzbox-plugin
Some checks failed
✅ Code checks / check-url-paths (push) Has been cancelled
✅ Code checks / lint (push) Has been cancelled
✅ Code checks / docker-tests (push) Has been cancelled
🐳 👩‍💻 docker dev / docker_dev (push) Has been cancelled
📘 Deploy MkDocs / deploy (push) Has been cancelled
feat(plugins): Add Fritz!Box device scanner plugin via TR-064 protocol
2026-04-06 21:03:35 +10:00
sebingel
13f840b9f2 Refactor Fritz!Box guest WiFi MAC generation to use string_to_fake_mac
The previous implementation derived the guest WiFi device MAC using a
custom MD5 hash of the Fritz!Box hardware MAC, producing a
locally-administered address with a 02: prefix. This was inconsistent
with the project-wide convention of using string_to_fake_mac() from
crypto_utils, which produces a fa:ce: prefixed address and is used by
all other plugins (nmap_dev_scan, adguard_import, pihole_api_scan, etc.).

A naive switch to string_to_fake_mac(host) would have introduced a
stability problem: if the user reconfigures FRITZBOX_HOST from an IP
address (e.g. 192.168.178.1) to a hostname (e.g. fritz.box), the fake
MAC would change and the guest device would re-appear as a new unknown
device in NetAlertX. The Fritz!Box hardware MAC is a stable identifier
that does not change with the configured host string.

Requested by reviewer jokob-sk in PR #1592.

Changes:
- Remove import hashlib (fritzbox.py:3) — no longer needed

- Add import string_to_fake_mac from utils.crypto_utils (fritzbox.py:15)

- Replace custom MD5-based MAC derivation in create_guest_wifi_device()
  with string_to_fake_mac(normalize_mac(fritzbox_mac)) (fritzbox.py:178)
  The Fritz!Box hardware MAC is fetched via TR-064 as before, but is now
  passed to the shared project utility instead of a custom hash.

- Add host parameter to create_guest_wifi_device(fc, host) (fritzbox.py:169)
  Used as fallback input to string_to_fake_mac() if the hardware MAC
  cannot be retrieved.

- Update call site in main() to pass host (fritzbox.py:224)

The guest WiFi device MAC is now stable across host configuration changes
and consistent with the fa:ce: prefix convention used across the project.
2026-04-06 10:37:51 +00:00
sebingel
ca9a0ef5ce Update Fritz!Box plugin README metadata
Requested by reviewer jokob-sk in PR #1592.

Changes:
- Replace generic author "NetAlertX Community" with @sebingel
  (README.md:204)

- Update release date from January 2026 to April 2026
  (README.md:205)

- Remove license field from version section (README.md:206)
  Project license is defined at repository level and does not need
  to be repeated in individual plugin READMEs.

- Update repository link from jokob-sk/NetAlertX to netalertx/NetAlertX
  (README.md:211)
  The project was transferred to the netalertx organisation; the
  canonical URL is now github.com/netalertx/NetAlertX.
2026-04-06 10:28:30 +00:00
sebingel
ee42d8b56a Refactor Fritz!Box plugin: move imports to module level
The fritzconnection imports were originally placed inside the function
bodies as a defensive pattern: by catching ImportError locally,
get_fritzbox_connection() and get_connected_devices() could each return
None or an empty list with a user-friendly log message instead of
crashing at import time. This kept the plugin runnable even when the
dependency was missing.

Requested by reviewer jokob-sk in PR #1592: move all imports to the top
of the module, treating fritzconnection as a required dependency that is
assumed to be installed via requirements.txt.

Changes:
- Add top-level imports for FritzConnection and FritzHosts
  (fritzbox.py:16-17)

- Remove inline import and ImportError handler from
  get_fritzbox_connection() (fritzbox.py:48, 64-67)

- Remove inline import and ImportError handler from
  get_connected_devices() (fritzbox.py:79, 133-134)

Functional behavior of the plugin is unchanged.
2026-04-06 10:20:37 +00:00
jokob-sk
ae2dc92318 LANG: Finnish
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-06 19:15:05 +10:00
sebingel
706ef1a8a1 Fix incorrect connection status field mapping in Fritz!Box README
The device information table in README.md incorrectly stated that the
Connection Status field ("Active"/"Inactive") maps to devVendor in the
devices table. In reality, watchedValue2 has no mapped_to_column entry
in config.json, meaning the value is stored only in the plugin's own
Plugins_FRITZBOX table and never promoted to the Devices table. A user
following the documentation to filter or display Connection Status via
devVendor would find no data there.

Changes:
- Correct the "Mapped To" column for Connection Status (README.md:86)
  Changed from "`devVendor` (shown as vendor field)" to "Plugin table
  only (not mapped to device fields)" to accurately reflect config.json
  behavior.

Users now have a correct expectation: Connection Status is visible in
the Fritz!Box plugin view but not in standard device columns. No
functional code was changed.
2026-04-06 07:49:16 +00:00
sebingel
1d4fd09444 Fix robustness issues in Fritz!Box plugin before PR
Two independent reliability problems were identified during PR readiness
review. First, FritzConnection had no explicit timeout, meaning an
unreachable or slow Fritz!Box would block the plugin process indefinitely
until the OS TCP timeout fired (typically 2+ minutes), making the 60s
RUN_TIMEOUT in config.json ineffective. Second, hashlib.md5() called
without usedforsecurity=False raises ValueError on FIPS-enforced systems
(common in enterprise Docker hosts), silently breaking the guest WiFi
synthetic device feature for those users.

Changes:
- Add timeout=10 to FritzConnection(...) call (fritzbox.py:57)
  The fritzconnection library accepts a timeout parameter directly in
  __init__; it applies per individual HTTP request to the Fritz!Box,
  bounding each TR-064 call including the initial connection handshake.

- Add usedforsecurity=False to hashlib.md5() call (fritzbox.py:191)
  The MD5 hash is used only for deterministic MAC derivation (not for
  any security purpose), so the flag is semantically correct and lifts
  the FIPS restriction without changing the computed value.

- Update test assertion to include timeout=10 (test_fritzbox.py:307)
  assert_called_once_with checks the exact call signature; the test
  expectation must match the updated production code.

The plugin now fails fast on unreachable Fritz!Box (within 10s per
request) and works correctly on FIPS-enabled hosts. Default behavior
for standard deployments is unchanged.
2026-04-06 07:48:59 +00:00
sebingel
0648e8217c Add full i18n for Fritz!Box plugin description and settings
The Fritz!Box plugin config.json only contained English (en_us) strings
for all translatable fields. NetAlertX supports 21 languages and shows
the plugin description and all setting labels in the user's chosen
language. Without translations, every non-English user sees raw English
text for the plugin card description, setting names, and setting
explanations regardless of their language preference.

Changes:
- front/plugins/fritzbox/config.json: added 20 translations for the
  top-level plugin `description` field (all 21 supported languages)

- front/plugins/fritzbox/config.json: added translations for `name` and
  `description` fields in all 14 settings (RUN, RUN_SCHD, HOST, PORT,
  USER, PASS, USE_TLS, REPORT_GUEST, GUEST_SERVICE, ACTIVE_ONLY, CMD,
  RUN_TIMEOUT, SET_ALWAYS, SET_EMPTY)

  Selectively translated by field type:
  - 12 settings: 21 languages for both name and description
  - HOST (name "Fritz!Box Host") and PORT (name "TR-064 Port"): name
    kept as en_us only — these are language-neutral proper names and
    standard identifiers; description translated in all 21 languages

  Technical terms left untranslated in all languages: Fritz!Box, TR-064,
  HTTPS, HTTP, WLANConfiguration, and all code identifiers referenced
  in descriptions (schedule, NEWDEV, Source = USER, Source = LOCKED)

Total: 544 localized strings added across 21 languages (ar_ar, ca_ca,
cs_cz, de_de, es_es, fa_fa, fr_fr, id_id, it_it, ja_jp, nb_no, pl_pl,
pt_br, pt_pt, ru_ru, sv_sv, tr_tr, uk_ua, vi_vn, zh_cn).

Users in all supported languages now see the plugin description card and
every setting label in their own language. The existing en_us fallback
mechanism ensures forward compatibility with any future languages added
to the project.
2026-04-06 07:34:16 +00:00
sebingel
5839853f69 Add Fritz!Box device scanner plugin via TR-064 protocol
NetAlertX had no native support for discovering devices connected to
Fritz!Box routers. Users relying on Fritz!Box as their primary home
router had to use generic network scanning (ARP/ICMP), missing
Fritz!Box-specific details like interface type (WiFi/LAN) and
connection status per device.

Changes:
- Add plugin implementation (front/plugins/fritzbox/fritzbox.py)
  Queries all hosts via FritzHosts TR-064 service, normalizes MACs,
  maps interface types (802.11→WiFi, Ethernet→LAN), and writes results
  to CurrentScan via Plugin_Objects. Supports filtering to active-only
  devices and optional guest WiFi monitoring via a synthetic AP device
  with a deterministic locally-administered MAC (02:xx derived from
  Fritz!Box MAC via MD5).

- Add plugin configuration (front/plugins/fritzbox/config.json)
  Defines plugin_type "device_scanner" with settings for host, port,
  credentials, guest WiFi reporting, and active-only filtering.
  Maps scan columns to CurrentScan fields (scanMac, scanLastIP, scanName,
  scanType). Default schedule: every 5 minutes.

- Add plugin documentation (front/plugins/fritzbox/README.md)
  Covers TR-064 protocol basics, quick setup guide, all settings with
  defaults, troubleshooting for common issues (connection refused, auth
  failures, no devices found), and technical details.

- Add fritzconnection>=1.15.1 dependency (requirements.txt)
  Required Python library for TR-064 communication with Fritz!Box.

- Add test suite (test/plugins/test_fritzbox.py:1-298)
  298 lines covering get_connected_devices (active filtering, MAC
  normalization, interface mapping, error resilience), check_guest_wifi_status
  (service detection, SSID-based guest detection, fallback behavior), and
  create_guest_wifi_device (deterministic MAC generation, locally-administered
  bit, fallback MAC, regression anchor with precomputed hash).

Users can now scan Fritz!Box-connected devices natively, seeing per-device
connection status and interface type directly in NetAlertX. Guest WiFi
monitoring provides visibility into guest network state. The plugin
defaults to HTTPS on port 49443 with active-only filtering enabled.
2026-04-06 07:34:14 +00:00
jokob-sk
8a07333c04 DOCS+LANG: hebrew
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-04-05 22:03:59 +10:00
Jokob @NetAlertX
36e606e1a1 Refactor MQTT plugin: replace prepTimeStamp with format_date_iso for timestamp formatting and add regression tests for format_date_iso function Events have wrong time in HA
Some checks failed
🐳 ⚠ docker-unsafe from next_release branch / docker_dev_unsafe (push) Has been cancelled
Fixes #1587
2026-04-04 23:04:58 +00:00