|

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

Publications similaires

  • Ile Et Vilaine : le Wimax installé !

    Selon 20 Minutes, l’installation du Wimax en Ile et Vilaine serait terminée. Quelques zones d’ombres subsistent encore, mais des pico-relais sont prévus pour y remédier rapidement. Rappelons qu’Altitude Infrastructure est l’opérateur retenu pour ce déploiement, un opérateur qui travaille au déploiement dans d’autres région de France, en Bourgogne par exemple. Il semblerait que la montée en débit soit désormais à l’ordre du jour de nombreux opérateurs, l’infrastructure étant totalement déployée, à l’instar d’Axione dans le Finistère et les Hautes Pyrénées….

  • |

    Galaxy S7 : premières impressions

    Loin de moi l’idée de remplacer ces énormes sites dédiés à nos smartphones ou à l’univers android : ils vont vous détailler de A à Z le tout nouveau Galaxy S7, prendre 70 photos du seul connecteur usb, bref, faire de l’article, du contenu, et poster durant 3 semaines sur tous les réseaux sociaux. Le présent billet se veut plus être un concentré d’impressions à la livraison et l’utilisation du S7, accompagné de son casque de réalité virtuelle, offert jusqu’au…

  • Complément d’enquête s’attaque à la 4G

    Grand moment hier soir sur France 2, lors de l’émission Complément d’enquête, avec un tour d’horizon du paysage 4G français. Lancée en grande pompes, la 4G ne semble pourtant pas si simple et ne couvrira pas tout le monde tout de suite. C’est ainsi que la carte de couverture de Bouygues Telecom a été analysée, ses lacunes clairement mises en avant, mais cela vous le saviez déjà via un précédent billet sur ce blog. Même Olivier Roussat, PdG de l’opérateur béton,…

  • Edge Router POE annoncé

    Vous vous souvenez de l’Edge Router, un routeur surpuissant proposé par Ubiquiti ? Le voici maintenant en version POE 24 ou 48 V, disposant cette fois de 5 ports ethernet. On sent qu’Ubiquiti cherche encore sa voie dans ce domaine, avec un routeur Lite puis maintenant le POE, et toujours aucune disponibilité pour les modèles professionnels. L’effet d’annonce fonctionne encore à pleine puissance, aussi ne vous précipitez pas, je jetez pas tout de suite votre Ci$co à la poubelle, patience 😉…

  • Fès et le Wimax

    Fès, ville marocaine, se dote d’un réseau Wimax destiné à relier les différentes administrations de la ville au réseau internet haut débit, en permettant en outre l’utilisation de VoIP pour disposer de communications inter-sites totalement gratuites, ou de la vidéo. Des bornes ont été déployées dans les principaux services administratifs pour que le grand public accède en ligne aux différentes données, documents, formalités. Source : Marocjournal.net

  • |

    Femtocell 3G : sans Bouygues, selon #PCINPACT

    Un article de PCInpact vient de me hérisser le poil , en parlant des possibles Femtocell Bouygues Telecom, je cite : Bouygues Telecom de son côté n’y voit « pas d’intérêt particulier en 3G », mais pense que ce sera nécessaire pour le LTE et la 4G où elle servira « d’outil d’amélioration » pour l’intérieur des bâtiments. Pas d’intérêt en 3G mais ok en LTE et 4G (4G et LTE, c’est la même chose monsieur le rédacteur de l’article, et on parle de LA Long…

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.