mqtt prep 4

This commit is contained in:
Jokob-sk
2022-11-26 12:07:48 +11:00
parent 92b821eb37
commit b86c9b360e

View File

@@ -1804,110 +1804,43 @@ def publish_mqtt(client, topic, message):
return True return True
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def mqtt_send_configs(client, device, deviceId): def create_generic_device(client):
deviceNameDisplay = re.sub('[^a-zA-Z0-9-_\s]', '', device["dev_Name"])
deviceName = 'PiAlert'
deviceId = 'pialert'
device_sensor(client, deviceId, deviceName, 'sensor', 'online', 'wifi-check')
device_sensor(client, deviceId, deviceName, 'sensor', 'down', 'wifi-cancel')
device_sensor(client, deviceId, deviceName, 'sensor', 'all', 'wifi')
device_sensor(client, deviceId, deviceName, 'sensor', 'archived', 'wifi-lock')
device_sensor(client, deviceId, deviceName, 'sensor', 'new', 'wifi-plus')
device_sensor(client, deviceId, deviceName, 'sensor', 'unknown', 'wifi-alert')
#-------------------------------------------------------------------------------
# create device in home assistant class device_sensor:
def __init__(self, client, deviceId, deviceName, sensorType, sensorName, icon):
# Last_IP self.deviceId = deviceId
self.deviceName = deviceName
self.sensorType = sensorType
self.sensorName = sensorName
self.icon = icon
message = '{ \ message = '{ \
"name":"'+ deviceNameDisplay +' Last Ip", \ "name":"'+ deviceName +' '+sensorName+'", \
"state_topic":"system-sensors/sensor/'+deviceId+'/state", \ "state_topic":"system-sensors/'+sensorType+'/'+deviceId+'/state", \
"value_template":"{{value_json.last_ip}}", \ "value_template":"{{value_json.'+sensorName+'}}", \
"unique_id":"'+deviceId+'_sensor_last_ip", \ "unique_id":"'+deviceId+'_sensor_'+sensorName+'", \
"device": \ "device": \
{ \ { \
"identifiers": ["'+deviceId+'_sensor", "'+device["dev_MAC"]+'"], \ "identifiers": ["'+deviceId+'_sensor"], \
"manufacturer": "PiAlert", \ "manufacturer": "PiAlert", \
"name":"'+deviceNameDisplay+'" \ "name":"'+deviceName+'" \
}, \ }, \
"icon":"mdi:ip-network" \ "icon":"mdi:'+icon+'" \
}' }'
topic="homeassistant/sensor/"+deviceId+"/last_ip/config" topic='homeassistant/'+sensorType+'/'+deviceId+'/'+sensorName+'/config'
publish_mqtt(client, topic, message)
# dev_PresentLastScan
message = '{\
"name":"'+ deviceNameDisplay +' Is present",\
"state_topic":"system-sensors/binary_sensor/'+deviceId+'/state",\
"value_template":"{{value_json.is_present}}",\
"unique_id":"'+deviceId+'_sensor_is_present",\
"device":\
{\
"identifiers":["'+deviceId+'_sensor", "'+device["dev_MAC"]+'"],\
"manufacturer": "PiAlert", \
"name":"'+deviceNameDisplay+'"\
},\
"icon":"mdi:wifi"\
}'
topic="homeassistant/binary_sensor/"+deviceId+"/is_present/config"
publish_mqtt(client, topic, message)
# dev_MAC
message = '{\
"name":"'+ deviceNameDisplay +' MAC address",\
"state_topic":"system-sensors/sensor/'+deviceId+'/state",\
"value_template":"{{value_json.mac_address}}",\
"unique_id":"'+deviceId+'_sensor_mac_address",\
"device":\
{\
"identifiers":["'+deviceId+'_sensor", "'+device["dev_MAC"]+'"],\
"manufacturer": "PiAlert", \
"name":"'+deviceNameDisplay+'"\
},\
"icon":"mdi:folder-key-network"\
}'
topic="homeassistant/sensor/"+deviceId+"/mac_address/config"
publish_mqtt(client, topic, message)
# dev_NewDevice
message = '{\
"name":"'+ deviceNameDisplay +' is new",\
"state_topic":"system-sensors/sensor/'+deviceId+'/state",\
"value_template":"{{value_json.is_new}}",\
"unique_id":"'+deviceId+'_sensor_is_new",\
"device":\
{\
"identifiers":["'+deviceId+'_sensor", "'+device["dev_MAC"]+'"],\
"manufacturer": "PiAlert", \
"name":"'+deviceNameDisplay+'"\
},\
"icon":"mdi:bell-alert-outline"\
}'
topic="homeassistant/sensor/"+deviceId+"/is_new/config"
publish_mqtt(client, topic, message)
# dev_Vendor
message = '{\
"name":"'+ deviceNameDisplay +' vendor",\
"state_topic":"system-sensors/sensor/'+deviceId+'/state",\
"value_template":"{{value_json.vendor}}",\
"unique_id":"'+deviceId+'_sensor_vendor",\
"device":\
{\
"identifiers":["'+deviceId+'_sensor", "'+device["dev_MAC"]+'"],\
"manufacturer": "PiAlert", \
"name":"'+deviceNameDisplay+'"\
},\
"icon":"mdi:cog"\
}'
topic="homeassistant/sensor/"+deviceId+"/vendor/config"
publish_mqtt(client, topic, message) publish_mqtt(client, topic, message)
@@ -1936,8 +1869,30 @@ def mqtt_start():
client.connect(mqttBroker, mqttPort) client.connect(mqttBroker, mqttPort)
client.loop_start() client.loop_start()
# General stats
# Create a devices for overall stats # Create a generic device for overal stats
create_generic_device(client)
# Get the data
row = get_device_stats()
columns = ["online","down","all","archived","new","unknown"]
payload = ""
# Update the values
for column in columns:
payload += '"'+column+'": ' + str(row[column]) +','
publish_mqtt(client, "system-sensors/sensor/pialert/state",
'{ \
'+ payload[:-1] +'\
}'
)
# Specific devices
# Get all devices # Get all devices
devices = get_all_devices() devices = get_all_devices()
@@ -1946,8 +1901,14 @@ def mqtt_start():
# Create devices in Home Assistant - send config messages # Create devices in Home Assistant - send config messages
deviceId = 'mac_' + device["dev_MAC"].replace(" ", "").replace(":", "_").lower() deviceId = 'mac_' + device["dev_MAC"].replace(" ", "").replace(":", "_").lower()
deviceNameDisplay = re.sub('[^a-zA-Z0-9-_\s]', '', device["dev_Name"])
device_sensor(client, deviceId, deviceNameDisplay, 'sensor', 'last_ip', 'ip-network')
device_sensor(client, deviceId, deviceNameDisplay, 'binary_sensor', 'is_present', 'wifi')
device_sensor(client, deviceId, deviceNameDisplay, 'sensor', 'mac_address', 'folder-key-network')
device_sensor(client, deviceId, deviceNameDisplay, 'sensor', 'is_new', 'bell-alert-outline')
device_sensor(client, deviceId, deviceNameDisplay, 'sensor', 'vendor', 'cog')
mqtt_send_configs(client, device, deviceId)
# update device sensors in home assistant # update device sensors in home assistant
@@ -1975,44 +1936,6 @@ def mqtt_start():
# retain=True, # retain=True,
# ) # )
# while True:
# time.sleep(15)
# # Online_Devices, Down_Devices, All_Devices, Archived_Devices
# row = get_device_stats()
# client.publish("pialert/devices/online/number",
# payload=row["Online_Devices"],
# qos=1,
# retain=True)
# client.publish("pialert/devices/down/number",
# payload=row["Down_Devices"],
# qos=1,
# retain=True)
# client.publish("pialert/devices/number",
# payload=row["All_Devices"],
# qos=1,
# retain=True)
# client.publish("pialert/devices/archived/number",
# payload=row["Archived_Devices"],
# qos=1,
# retain=True)
# client.publish("pialert/devices/new/number",
# payload=row["New_Devices"],
# qos=1,
# retain=True)
# client.publish("pialert/devices/unknown/number",
# payload=row["Unknown_Devices"],
# qos=1,
# retain=True)
client.loop() client.loop()
@@ -2255,8 +2178,9 @@ def get_device_stats():
openDB() openDB()
# columns = ["online","down","all","archived","new","unknown"]
sql.execute(""" sql.execute("""
SELECT Online_Devices, Down_Devices, All_Devices, Archived_Devices, (select count(*) from Devices a where dev_NewDevice = 1 ) as New_Devices, (select count(*) from Devices a where dev_Name = '(unknown)' ) as Unknown_Devices from Online_History limit 1 SELECT Online_Devices as online, Down_Devices as down, All_Devices as 'all', Archived_Devices as archived, (select count(*) from Devices a where dev_NewDevice = 1 ) as new, (select count(*) from Devices a where dev_Name = '(unknown)' ) as unknown from Online_History limit 1
""") """)
row = sql.fetchone() row = sql.fetchone()