100 lines
2.8 KiB
Python
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()
|