Files
pilot/mqtt_unvai.py
2024-04-14 07:34:53 +02:00

100 lines
2.8 KiB
Python

import paho.mqtt.client as mqtt
import socket
hostname = socket.gethostname()
# Paramètres MQTT
mqtt_broker_ip_address = "10.0.0.3"
mqtt_port = 1883
mqtt_username = ""
mqtt_password = ""
# Configuration des entités
shutdown_entity = {
"availability_topic": f"pilot/{hostname}/shutdown/available",
"payload_not_available": "offline",
}
# battery_entity = {
# "availability_topic": f"pilot/{hostname}/battery/available",
# "payload_not_available": "offline",
# }
cpu_temperature_entity = {
"availability_topic": f"pilot/{hostname}/cpu_temp/available",
"payload_not_available": "offline",
}
gpu_temperature_entity = {
"availability_topic": f"pilot/{hostname}/gpu_temp/available",
"payload_not_available": "offline",
}
gpu_memory_entity = {
"availability_topic": f"pilot/{hostname}/gpu_memory_usage/available",
"payload_not_available": "offline",
}
memory_usage_entity = {
"availability_topic": f"pilot/{hostname}/memory_used/available",
"payload_not_available": "offline",
}
cpu_usage_entity = {
"availability_topic": f"pilot/{hostname}/cpu_usage/available",
"payload_not_available": "offline",
}
# Fonction pour publier l'état "unavailable" pour les entités
def publish_unavailability(client):
client.publish(
shutdown_entity["availability_topic"],
shutdown_entity["payload_not_available"],
retain=True,
)
# client.publish(
# battery_entity["availability_topic"],
# battery_entity["payload_not_available"],
# retain=True,
# )
client.publish(
cpu_temperature_entity["availability_topic"],
cpu_temperature_entity["payload_not_available"],
retain=True,
)
client.publish(
gpu_temperature_entity["availability_topic"],
gpu_temperature_entity["payload_not_available"],
retain=True,
)
client.publish(
gpu_memory_entity["availability_topic"],
gpu_memory_entity["payload_not_available"],
retain=True,
)
client.publish(
cpu_usage_entity["availability_topic"],
cpu_usage_entity["payload_not_available"],
retain=True,
)
client.publish(
memory_usage_entity["availability_topic"],
memory_usage_entity["payload_not_available"],
retain=True,
)
print("Published unavailability for all entities")
# Fonction appelée lors de la connexion au broker MQTT
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected with result code {rc}")
publish_unavailability(client)
client.disconnect() # Déconnecter après la publication
# Configuration et démarrage du client MQTT
client = mqtt.Client()
client.username_pw_set(mqtt_username, mqtt_password)
client.on_connect = on_connect
client.connect(mqtt_broker_ip_address, mqtt_port, 60)
client.loop_forever()