Intégration Home Assistant pour récupérer les informations de marée et de météo marine.
v2.1.11 - Refactoring architecture, sécurité, corrections
- 🏗️ Refactoring architecture : Extraction des clients API (
ListePorts,MeteoMarine,MeteoMarineLive,StormIO) dansapi_clients.py, suppression desensorApiMaree.py, parseurs dédiés dansparsers.py. - 🔄 Coordinator unique : Suppression du double coordinator — un seul
DataUpdateCoordinatorcréé dans__init__.pyavec support StormGlass natif. - 🔒 Parsers défensifs : Accès
.get()sur les clés API imbriquées (contenu["marees"],previs["detail"]) — pas de crash si l'API retourne une réponse partielle. - 🌡️ Visibility en float : Capteur
visibilitycasté enfloatau lieu destr— compatibleSensorStateClass.MEASUREMENT. - ⚡ Cache capteurs :
native_valueetextra_state_attributespartagent un cache — 1 appel status/update au lieu de 2. - 🛡️ Live feed optionnel : Un échec de l'endpoint live ne met plus les capteurs marées en unavailable (PR #65, merci @3liXIr).
- 🏷️ Platform enum :
PLATFORMSutilisePlatform.SENSOR/Platform.WEATHER(HA 2023.7+). - 🔤 Traductions :
strings.jsonaligné sur les vrais keys capteurs +translation_keyajouté. - 🧹 Nettoyage : Pattern
try/except ImportErrorsupprimé,config_entry=ajouté au coordinator,__name__écrasé supprimé,DeviceInfoau lieu de dict brut. - 🐍 Typage : mypy 0 erreur, ruff 0 violation.
- 🔄 Retry automatique : Appels réseau avec
tenacity— backoff exponentiel, max 3 tentatives sur erreurs transitoires (réseau, 429, 5xx) (issue #51). ⚠️ Exceptions métier :ApiError,RateLimitError,NotFoundError,NetworkErrorremplacent le pattern{"error": "UNKERROR_001"}.- 📝 Logging structuré :
[source] GET url -> status (retriable)pour chaque tentative. - ⏱️ Timeout configurable : Paramètre
max_retriessurasync_fetch_json(défaut 3).
- 🧪 Tests unitaires pytest : Correction de 57 tests échoués (noms de méthodes obsolètes), ajout de
test_config_flow.py(27 tests),test_sensor.py(140 tests),test_weather.py(40 tests) (issue #50). - 📊 Couverture 87% : Objectif 80% dépassé. Modules couverts à 100% :
config_flow.py,const.py,http_utils.py,types.py. - 🔤 Alignement API : Tests synchronisés avec les nouveaux noms de méthodes (
get_port_name,has_error,get_next_tide_state, etc.).
- 🌞 Capteur UV :
MareeUVSensorcâblé à la vraie donnée API MeteoConsult (previs.detail) au lieu de retourner0en dur (issue #52). - 🧪 Compatibilité : Les capteurs Freeze/Snow restent en dummy pour compatibilité carte MeteoFrance HACS.
- 🧪 Tests : Ajout de 3 tests pour
get_uv_status(), correction de l'import dans les tests.
- 🔧 CI/CD complet : Pipeline unifié avec lint (ruff), typecheck (mypy), tests (pytest + coverage), CodeQL et HACS validation (issue #57).
- 🧹 Nettoyage : Suppression des workflows obsolètes remplacés par un seul
ci.yml. - 🗑️ Fichiers legacy supprimés :
testMareeInfo.pyettest_search.py.
- 🌊 Nouveau capteur :
sensor.prochaine_grande_maree— affiche la date/heure de la prochaine grande marée (coefficient >= 100) avec les attributscoefficient,type,hauteur,delai,horaire(issue #47). - 📊 Prévisions étendues : Les données MeteoConsult sont maintenant exploitées sur 15 jours au lieu de 6, permettant de détecter les grandes marées à venir.
⚠️ Comportement morte-eau : Le capteur afficheunavailableen période de morte-eau (aucun coefficient >= 100 dans les 15 jours). C'est normal : les grandes marées ne surviennent que lors des périodes d'équinoxe (2-4 fois par mois).
- 🏷️ Constantes centralisées :
DEFAULT_MAX_HOURS,DEFAULT_SCAN_INTERVAL,CONF_STORM_KEYdéplacés dansconst.py(issue #55). - 🔤 Nommage FR→EN : Les méthodes publiques de
ApiMareeInfoont été renommées en anglais (get_port_name(),get_tide_data(),has_error(), etc.) (issue #55). - 🔤 Noms de classes PascalCase :
manageSensorState→SensorStateManager(issue #55). - 🔤 Variables snake_case :
_sAM→_sensor_managerdanssensor.py(issue #55).
- 🏷️ Typage complet : Ajout de TypedDict pour les structures de données (
TideData,ForecastData,LiveForecastItemRaw, etc.) avec hints sur tous les attributs et méthodes (issue #53).
- 🔧 Refactor HTTP : Extraction du helper HTTP partagé (
http_utils.py) supprimant la duplication de code entreListePortsetMeteoMarine(issue #48). - ✅ Tests unitaires : Ajout d'une suite de tests complète avec pytest + couverture.
- 🤖 CI GitHub Actions : Ajout du workflow
tests.ymlpour exécuter les tests automatiquement. - 📦 Dépendances de test : Ajout de
requirements-test.txtetpyproject.toml.
- 🚀 Entité Weather : Ajout d'une plateforme météo complète (
weather) native pour Home Assistant. - 🎨 Compatibilité Carte Météo-France : Capteurs harmonisés pour fonctionner avec la carte Lovelace personnalisée Météo-France.
- 📈 Prévisions de pluie : Support de la pluie dans l'heure avec graphique et détection de la prochaine pluie.
- 🌬️ Pression atmosphérique : Ajout d'un capteur de pression et de ses prévisions (hPa). Compatible avec la carte content-card-pressure-forecast.
- 🌓 Gestion Jour/Nuit : Icônes dynamiques basées sur la position du soleil (
sun.sun). - ⚡ Rafraîchissement optimisé : Passage à un intervalle de mise à jour de 15 minutes pour plus de précision sur les prévisions.
- 🛠️ Refonte technique : Migration vers des dictionnaires standards pour les attributs et nettoyage complet du code.
- ✅ Correction de l'erreur 403 : Résolution des problèmes de requête à l'API MeteoMarine
- ✅ Headers HTTP optimisés : Ajout des headers de sécurité (sec-*) et User-Agent Chrome à jour
- ✅ Gestion SSL améliorée : Support SSL désactivé pour plus de compatibilité
- ✅ Support async/await : Gestion correcte des coroutines asyncio pour les tests
Consultez l'historique git pour les détails des versions précédentes.
- Copiez le dossier
custom_components/apiMareeInfodans votre dossierconfig/custom_components/. - Redémarrez Home Assistant.
configuration.yaml n'est plus supportée. Tout se fait désormais via l'interface utilisateur.
- Allez dans Paramètres -> Appareils et services.
- Cliquez sur le bouton Ajouter une intégration en bas à droite.
- Recherchez et sélectionnez apiMareeInfo.
- Étape 1 : Recherche - Entrez le nom de la ville ou du port que vous souhaitez suivre (ex: "Saint-Malo").
- Étape 2 : Sélection - Choisissez le port exact dans la liste déroulante qui s'affiche, puis validez.
Cette intégration utilise les standards de nommage récents de Home Assistant. Un appareil (Device) est créé pour chaque port configuré (ex: Maree Saint-Malo), et les capteurs sont associés à cet appareil.
Voici les entités disponibles (exemple pour le port de Saint-Malo) :
| Entité | ID (exemple) | Description |
|---|---|---|
| Marée | sensor.maree_saint_malo |
Capteur principal. L'état indique le statut actuel. Contient tous les détails en attributs. |
| Prochaine Haute | sensor.maree_saint_malo_prochaine_haute |
Heure et hauteur de la prochaine marée haute. |
| Prochaine Basse | sensor.maree_saint_malo_prochaine_basse |
Heure et hauteur de la prochaine marée basse. |
| Température Eau | sensor.maree_saint_malo_temperature_eau |
Température de l'eau (si disponible). |
| Prochaine Grande Marée | sensor.maree_saint_malo_prochaine_grande_maree |
Date/heure de la prochaine marée avec coefficient >= 100. Indisponible en morte-eau. |
Si vous utilisiez une version précédente configurée en YAML :
- Supprimez les lignes correspondantes dans votre
configuration.yaml. - Redémarrez Home Assistant.
- Ajoutez l'intégration via l'interface comme décrit ci-dessus.
- Pensez à mettre à jour vos cartes Lovelace avec les nouveaux noms d'entités (les anciens noms du type
sensor.myport_...ne sont plus utilisés par défaut).
Données fournies par Météo Consult.
Cette intégration est développée de manière indépendante et n'est affiliée ni à Météo Consult.