Envoyez l’heure de coucher du soleil en MQTT
Voici un script Python3 qui permet d’envoyer une trame MQTT formatée json sur le topic de votre choix, contenant l’heure de coucher du soleil. Ici, en vous abonnant à home/sunset, vous recevrez par exemple :
{« sunset_time »: « 17:41:25 », « latitude »: 47.4108, « longitude »: -2.1692, « timestamp »: « 2026-01-11T16:14:45.542727 »}
Notez qu’il est possible de n’avoir que l’heure en modifiant le code comme suit :
# AVANT (JSON)
payload = {
"sunset_time": sunset_time,
"latitude": lat,
"longitude": lon,
"timestamp": datetime.now().isoformat()
}
result = client.publish(topic, json.dumps(payload), qos=1, retain=True)
# APRÈS (texte simple)
result = client.publish(topic, sunset_time, qos=1, retain=True)
```
Voici le script Json de base :
#!/usr/bin/env python3
"""
Script pour publier l'heure de coucher du soleil via MQTT
"""
import requests
from datetime import datetime
from zoneinfo import ZoneInfo
import paho.mqtt.client as mqtt
import json
# Configuration MQTT
MQTT_BROKER = "localhost" # Adresse de votre broker MQTT
MQTT_PORT = 1883
MQTT_TOPIC = "home/sunset"
MQTT_CLIENT_ID = "sunset_publisher"
MQTT_USERNAME = "username" # Remplacez par votre login
MQTT_PASSWORD = "mot_de_passe" # Remplacez par votre mot de passe
# Configuration localisation - CROSSAC, France
LATITUDE = 47.4108
LONGITUDE = -2.1692
TIMEZONE = "Europe/Paris" # Fuseau horaire français (gère CET/CEST automatiquement)
def get_sunset_time(lat, lon, timezone="Europe/Paris"):
"""
Récupère l'heure de coucher du soleil via l'API sunrise-sunset.org
Retourne l'heure en heure locale du fuseau horaire spécifié
(gère automatiquement heure d'été/hiver)
"""
url = f"https://api.sunrise-sunset.org/json?lat={lat}&lng={lon}&formatted=0"
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
data = response.json()
if data['status'] == 'OK':
sunset_utc = data['results']['sunset']
# Conversion en objet datetime UTC
sunset_dt = datetime.fromisoformat(sunset_utc.replace('Z', '+00:00'))
# Conversion en heure locale du fuseau horaire spécifié
tz = ZoneInfo(timezone)
sunset_local = sunset_dt.astimezone(tz)
# Format avec indication du fuseau horaire
heure_locale = sunset_local.strftime("%H:%M:%S")
fuseau = sunset_local.strftime("%Z") # CET ou CEST
print(f" Heure UTC: {sunset_dt.strftime('%H:%M:%S')} UTC")
print(f" Heure locale: {heure_locale} {fuseau}")
return heure_locale
else:
return None
except Exception as e:
print(f"Erreur lors de la récupération du coucher de soleil: {e}")
return None
def publish_sunset(broker, port, topic, lat, lon, timezone="Europe/Paris"):
"""
Publie l'heure de coucher du soleil sur le topic MQTT
"""
sunset_time = get_sunset_time(lat, lon, timezone)
if sunset_time is None:
print("Impossible de récupérer l'heure du coucher de soleil")
return False
# Création du payload
payload = {
"sunset_time": sunset_time,
"latitude": lat,
"longitude": lon,
"timestamp": datetime.now().isoformat()
}
try:
# Connexion au broker MQTT
client = mqtt.Client(client_id=MQTT_CLIENT_ID)
# Authentification
client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
client.connect(broker, port, 60)
# Publication du message
result = client.publish(topic, json.dumps(payload), qos=1, retain=True)
if result.rc == mqtt.MQTT_ERR_SUCCESS:
print(f"✓ Message publié sur {topic}")
print(f" Coucher du soleil: {sunset_time}")
print(f" Localisation: {lat}, {lon}")
return True
else:
print(f"✗ Erreur lors de la publication: {result.rc}")
return False
except Exception as e:
print(f"Erreur MQTT: {e}")
return False
finally:
client.disconnect()
if __name__ == "__main__":
# Exemple d'utilisation
publish_sunset(
broker=MQTT_BROKER,
port=MQTT_PORT,
topic=MQTT_TOPIC,
lat=LATITUDE,
lon=LONGITUDE,
timezone=TIMEZONE
)
Ce script a été en partie généré par Claude AI

