From e2d84a18851e53f10b8e0d53261566ccf1c0eb40 Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Sun, 29 Sep 2024 11:52:29 +1000 Subject: [PATCH] MQTT handling diacritics #813 --- front/plugins/_publisher_mqtt/config.json | 9 +++++++++ front/plugins/_publisher_mqtt/mqtt.py | 6 ++++-- server/helper.py | 10 +++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/front/plugins/_publisher_mqtt/config.json b/front/plugins/_publisher_mqtt/config.json index 422f0c01..754bc2c2 100755 --- a/front/plugins/_publisher_mqtt/config.json +++ b/front/plugins/_publisher_mqtt/config.json @@ -5,6 +5,15 @@ "enabled": true, "data_source": "script", "show_ui": true, + "data_filters": [ + { + "compare_column": "Watched_Value4", + "compare_operator": "==", + "compare_field_id": "txtMacFilter", + "compare_js_template": "'{value}'.toString()", + "compare_use_quotes": true + } + ], "localized": ["display_name", "description", "icon"], "display_name": [ { diff --git a/front/plugins/_publisher_mqtt/mqtt.py b/front/plugins/_publisher_mqtt/mqtt.py index b29b10f3..cbbeb0c0 100755 --- a/front/plugins/_publisher_mqtt/mqtt.py +++ b/front/plugins/_publisher_mqtt/mqtt.py @@ -9,6 +9,7 @@ import sys from datetime import datetime import time import re +import unicodedata import paho.mqtt.client as mqtt # from paho.mqtt import client as mqtt_client # from paho.mqtt import CallbackAPIVersion as mqtt_CallbackAPIVersion @@ -26,7 +27,7 @@ from const import apiPath, confFileName from plugin_utils import getPluginObject from plugin_helper import Plugin_Objects from logger import mylog, append_line_to_file -from helper import timeNowTZ, get_setting_value, bytes_to_string, sanitize_string +from helper import timeNowTZ, get_setting_value, bytes_to_string, sanitize_string, normalize_string from notification import Notification_obj from database import DB, get_device_stats from pytz import timezone @@ -414,7 +415,8 @@ def mqtt_start(db): # Create devices in Home Assistant - send config messages deviceId = 'mac_' + device["dev_MAC"].replace(" ", "").replace(":", "_").lower() - devDisplayName = re.sub('[^a-zA-Z0-9-_\\s]', '', device["dev_Name"]) + # Normalize the string and remove unwanted characters + devDisplayName = re.sub('[^a-zA-Z0-9-_\\s]', '', normalize_string(device["dev_Name"])) sensorConfig = create_sensor(mqtt_client, deviceId, devDisplayName, 'sensor', 'last_ip', 'ip-network', device["dev_MAC"]) sensorConfig = create_sensor(mqtt_client, deviceId, devDisplayName, 'sensor', 'mac_address', 'folder-key-network', device["dev_MAC"]) diff --git a/server/helper.py b/server/helper.py index 0625bfd2..cb6f3163 100755 --- a/server/helper.py +++ b/server/helper.py @@ -3,9 +3,9 @@ import io import sys import datetime -# from datetime import strptime import os import re +import unicodedata import subprocess import pytz from pytz import timezone @@ -812,6 +812,14 @@ def sanitize_SQL_input(val): return '' return val.replace("'", "_") +#------------------------------------------------------------------------------- +# Function to normalize the string and remove diacritics +def normalize_string(text): + # Normalize the text to 'NFD' to separate base characters and diacritics + normalized_text = unicodedata.normalize('NFD', text) + # Filter out diacritics and unwanted characters + return ''.join(c for c in normalized_text if unicodedata.category(c) != 'Mn') + #------------------------------------------------------------------------------- def generate_mac_links (html, deviceUrl):