🔌 MQTT - do not send UNKNOWN + expose DEVICES_SQL

This commit is contained in:
jokob-sk
2024-07-09 23:09:42 +10:00
parent 0eff7cc3f1
commit 95d5dbcf68
4 changed files with 36 additions and 7 deletions

View File

@@ -85,7 +85,7 @@ These are the most important settings to get at least some output in your Device
Use the official installation guides at first and use community content as supplementary material. Open an issue if you'd like to add your link to the list 🙏 Use the official installation guides at first and use community content as supplementary material. Open an issue if you'd like to add your link to the list 🙏
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) - ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently) - 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/) - 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
- ▶ [How to Setup Pi.Alert on Your Synology NAS - Digital Aloha](https://www.youtube.com/watch?v=M4YhpuRFaUg) - ▶ [How to Setup Pi.Alert on Your Synology NAS - Digital Aloha](https://www.youtube.com/watch?v=M4YhpuRFaUg)

View File

@@ -25,7 +25,7 @@
"description": [ "description": [
{ {
"language_code": "en_us", "language_code": "en_us",
"string": "A plugin to publish a notification via the Apprise gateway." "string": "A plugin to publish a notification via MQTT to Home Assistant."
} }
], ],
"params": [ "params": [
@@ -671,6 +671,30 @@
} }
] ]
}, },
{
"function": "DEVICES_SQL",
"type": {
"dataType": "string",
"elements": [
{ "elementType": "input", "elementOptions": [], "transformers": [] }
]
},
"default_value": "select rowid, * from Devices where dev_Name not in ({s-quote}null{s-quote}, {s-quote}(name not found){s-quote}, {s-quote}(unknown){s-quote})",
"options": [],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Device SQL"
}
],
"description": [
{
"language_code": "en_us",
"string": "The SQL condition used to select which Devices are sent via MQTT. Please note that you need to use <code>{s-quote}</code> for single quotes replacement and double-quotes are not supported."
}
]
},
{ {
"function": "QOS", "function": "QOS",
"type": { "type": {

View File

@@ -13,6 +13,7 @@ import paho.mqtt.client as mqtt
# from paho.mqtt import client as mqtt_client # from paho.mqtt import client as mqtt_client
# from paho.mqtt import CallbackAPIVersion as mqtt_CallbackAPIVersion # from paho.mqtt import CallbackAPIVersion as mqtt_CallbackAPIVersion
import hashlib import hashlib
import sqlite3
# Register NetAlertX directories # Register NetAlertX directories
@@ -27,7 +28,7 @@ from plugin_helper import Plugin_Objects
from logger import mylog, append_line_to_file 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
from notification import Notification_obj from notification import Notification_obj
from database import DB, get_all_devices, get_device_stats from database import DB, get_device_stats
CUR_PATH = str(pathlib.Path(__file__).parent.resolve()) CUR_PATH = str(pathlib.Path(__file__).parent.resolve())
@@ -340,10 +341,10 @@ def mqtt_start(db):
# Generate device-specific MQTT messages if enabled # Generate device-specific MQTT messages if enabled
if get_setting_value('MQTT_SEND_DEVICES') == True: if get_setting_value('MQTT_SEND_DEVICES') == True:
# Specific devices # Specific devices processing
# Get all devices # Get all devices
devices = get_all_devices(db) devices = db.read(get_setting_value('MQTT_DEVICES_SQL').replace('{s-quote}',"'"))
sec_delay = len(devices) * int(get_setting_value('MQTT_DELAY_SEC'))*5 sec_delay = len(devices) * int(get_setting_value('MQTT_DELAY_SEC'))*5

View File

@@ -325,7 +325,6 @@ def setting_value_to_python_type(set_type, set_value):
# "type": {"dataType":"array", "elements": [{"elementType" : "select", "elementOptions" : [{"multiple":"true"}] ,"transformers": []}]} # "type": {"dataType":"array", "elements": [{"elementType" : "select", "elementOptions" : [{"multiple":"true"}] ,"transformers": []}]}
setTypJSN = json.loads(str(set_type).replace('"','\"').replace("'",'"')) setTypJSN = json.loads(str(set_type).replace('"','\"').replace("'",'"'))
# Handle different types of settings based on set_type dictionary # Handle different types of settings based on set_type dictionary
@@ -356,15 +355,20 @@ def setting_value_to_python_type(set_type, set_value):
if dataType == 'string' and elementType in ['input', 'select']: if dataType == 'string' and elementType in ['input', 'select']:
value = str(set_value) value = str(set_value)
elif dataType == 'integer' and elementType == 'input': elif dataType == 'integer' and (elementType == 'input' or elementType == 'select'):
# handle storing/retrieving boolean values as 1/0 # handle storing/retrieving boolean values as 1/0
if set_value.lower() not in ['true', 'false'] and isinstance(set_value, str): if set_value.lower() not in ['true', 'false'] and isinstance(set_value, str):
value = int(set_value) value = int(set_value)
elif isinstance(set_value, bool): elif isinstance(set_value, bool):
value = 1 if set_value else 0 value = 1 if set_value else 0
elif isinstance(set_value, str): elif isinstance(set_value, str):
value = 1 if set_value.lower() == 'true' else 0 value = 1 if set_value.lower() == 'true' else 0
else: else:
value = int(set_value) value = int(set_value)
elif dataType == 'boolean' and elementType == 'input': elif dataType == 'boolean' and elementType == 'input':