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
















