Intégration pour Cave à Vin

Bonjour à tous,

J’espère poster au bon endroit.
Je voulais partager mon projet de suivi de cave à vin : Millesime.

Comme beaucoup d’entre vous, je cherchais un moyen de gérer ma cave à vin. Les applications dédiées sont souvent payantes. Alors j’ai décidé de créer ma propre intégration sur mesure — et j’en ai profité pour tester les limites de l’IA générative dans un vrai projet de développement.

Pour info, je n’ai pas encore le niveau de faire ce développement seul.

L’intégralité du projet a été développée et testée via Claude (Anthropic), sans écrire une seule ligne de code moi-même. De l’architecture backend Python à la carte Lovelace JavaScript, en passant par l’intégration Gemini AI, la gestion des erreurs Safari/iPhone, la publication HACS et la rédaction du README — tout a été généré, corrigé et itéré par l’IA.
J’ai même laissé l’IA proposer le nom de l’application.

Les fonctions de l’intégration Millésime (écrit par le développeur Claude lui-même) :
:bottle_with_popping_cork: Visualisation de la cave style Vinotag — cercles colorés sur clayettes bois
:camera: Scan d’étiquette par photo — Gemini AI identifie le vin et remplit la fiche automatiquement
:money_bag: Estimation du prix en un clic via Gemini
• ⎘ Duplication de bouteilles — pratique pour les caisses
:chart_increasing: Suivi de la valeur de la cave dans le temps avec graphique
:magnifying_glass_tilted_left: Recherche texte avec suggestions temps réel
:control_knobs: Filtres par type de vin et par événement (Grande occasion, À garder, Ne pas toucher…)
:mobile_phone: Interface pensée mobile-first / iPhone
:globe_with_meridians: Fallback Open Food Facts (150 000+ vins, sans clé)

Il aura fallut 1semaine de travail pour avoir ce résultat : ça fonctionne et les données sont cohérentes. C’est éprouvé sur la cave perso.

Le projet a été soumis au store HACS officiel et est déjà installable en dépôt custom.

Disponible sur GitHub via mon dépôt custom :
:backhand_index_pointing_right: GitHub - Redsklns/ha-millesime: Suivi de la cave à vin · GitHub

N’hésitez pas si vous avez des questions, des retours ou des idées d’amélioration !
Santé :clinking_glasses:

3 « J'aime »

bonjour,

On pourrait avoir des captures d’écran pour avoir une idée du rendu? Merci!

Merci pour cette intégration

Bonjour et merci pour cette integration
chez moi, je bloque à l’étape 4 .. j’ai bien mis Ajouter une ressource URL : /local/millesime/millesime-card.js

mais il ne voit pas la carte lovelace ! que je cherche ou meme si je tape le type directement :

edit : c’est bon, j’ai trouvé. il ne m’avait pas créé le répertoire www/millesime :roll_eyes:

1 « J'aime »

Bonjour,
Merci pour cette intégration.
La disposition dans ma cave est un peu différente pour le tête bêche.
Je ne sais pas si tu as possibilité de rajouter une option pour cette disposition:

En améliorations possibles je verrai bien:

  • la possibilité de pouvoir déplacer une bouteille sans avoir à la supprimer et la recréer au bon emplacement.
  • pouvoir déplacer un étage complet dans la cave.
  • quand on copie une bouteille pouvoir définir plusieurs emplacement et éviter d’avoir à faire plusieurs fois la fonction copie pour chaque bouteille identique.

Je n’ai pas compris la fonction de quantité quand on ajoute une bouteille puisque que l’on ne peut choisir qu’un seul emplacement.
Pour scanner l’étiquette cela m’ouvre l’appli photo et non pas l’appareil photo (sur Android).

:slightly_smiling_face:

Salut,

Testé rapidement et c’est un bon début ! :clap:

Quelques confirmations rapides :

  • la carte ne s’installe pas seule, même en passant par hacs. il faut faire la manip à la main
  • reconnaissance avec photo mais pas en live avec l’appareil (android)

Autre points constatés:

  • quand la reconnaissance photo ne donne rien, ça quitte le création d’un nouveau vin sans laisser la possibilité de compléter manuellement
  • j’ai 3 bouteilles qui sont listées, mais pas dans des positions de casiers, j’ai pas trouver comment leur attribuer une place, ni comment les virer.

Quelques idées d’améliorations

  • prise en compte du theme de l’utilisateur (noir/blanc et couleur primaire/secondaire)
  • chercher les bouteilles par nom etc
  • ajouter les accords avec les repas
  • alerte quand on arrive dans la fin de la période à boire
  • Coté carte, je verrai bien un truc plus modulaire, perso j’ai des casiers de taille/position différents, des niches, des blocs de mousse etc… Pouvoir faire un patchwork pour identifier la bonne place sans tro p chercher, je suis preneur
1 « J'aime »

Hello @Redsklns

J’ai ‹ claudé › 2 ou 3 trucs : GitHub - Pulpyyyy/ha-millesime: Suivi de la cave à vin · GitHub


📦 Gestion des emplacements

Quantité → N emplacements physiques

Ajouter un vin avec qté = 3 crée désormais 3 entrées séparées sur 3 slots libres consécutifs, au lieu d’un seul enregistrement avec quantity: 3. Chaque bouteille occupe son propre emplacement physique dans le casier.

Auto-détection du premier slot libre

Le bouton + Vin de l’en-tête pré-sélectionne automatiquement le premier emplacement disponible — plus de bouteilles qui s’empilent toutes sur le slot 0.

Slot picker visuel

Le champ numérique est remplacé par une mini-grille cliquable représentant l’étage réel. Les slots occupés affichent la couleur du vin, les libres sont cliquables directement.

Étage modifiable à l’édition

Le sélecteur d’étage est maintenant accessible y compris lors de la modification d’une bouteille existante, et pas uniquement à l’ajout.

Validation des collisions

Vérification côté frontend (avertissement immédiat) et côté backend (HomeAssistantError) pour add_bottle, update_bottle et duplicate_bottle.

↕️ Déplacement et échange de bouteilles

Comment déplacer une bouteille :

  1. Cliquez sur une bouteille pour ouvrir sa fiche

  2. Cliquez :up_down_arrow: Déplacer

  3. Un bandeau apparaît en haut de la cave

  4. Cliquez sur l’emplacement cible

  • Slot vide → la bouteille est déplacée

  • Slot occupé → les deux bouteilles s’échangent automatiquement

  • Fermer un modal ou cliquer Annuler quitte le mode déplacement

🍷 Fiche détail enrichie

Nouvelles informations affichées :

| Champ | Description |

|—|—|

| :round_pushpin: Emplacement | Nom de l’étage + numéro de slot |

| :one_o_clock: Fenêtre de dégustation | Badge :white_check_mark: À boire / :hourglass_not_done: Trop tôt (avec compte à rebours) / :red_circle: Passé l’apogée |

| :fork_and_knife_with_plate: Accords mets-vins | Affichés en chips individuels |

| Appellation / Région / Pays | Séparés dans la grille |

Le millésime est maintenant visible directement dans le titre du header de la fiche.

🎨 Thème Home Assistant (clair / sombre)

La carte s’adapte automatiquement au thème HA configuré. Les variables CSS de HA (--card-background-color, --primary-text-color, --secondary-background-color, --divider-color…) sont injectées dans le shadow DOM et dans les modals.

Le graphique d’historique de valeur adapte également ses couleurs (fond, axes, courbe) au thème actif, y compris lors d’un changement de thème en temps réel.

⚙️ Backend / développeurs
  • update_bottle accepte maintenant floor_id et slot pour les déplacements

  • Nouvelle fonction interne _slot_taken() mutualisée

  • services.yaml mis à jour en conséquence

🛠️ Configuration YAML de la carte

La carte ne requiert aucun paramètre obligatoire. Options disponibles :


type: custom:millesime-card

bottle_style: bottle # "bottle" (défaut) | "dot"

bottle_label: none # "none" (défaut) | "vintage" | "name" | "name_vintage" | "vintage_name"


bottle_style — forme des emplacements dans le casier

| Valeur | Rendu |

|—|—|

| bottle | Silhouette de bouteille SVG colorée (défaut) |

| dot | Cercle coloré compact |


bottle_label — texte affiché sous chaque bouteille

| Valeur | Affichage |

|—|—|

| none | Aucun label (défaut) |

| vintage | Millésime seul (ex. 2019) |

| name | Nom court, tronqué à 15 caractères |

| name_vintage | Nom sur la 1ʳᵉ ligne, millésime sur la 2ᵉ |

| vintage_name | Millésime sur la 1ʳᵉ ligne, nom sur la 2ᵉ |


Disposition des étagères — configurable par étage depuis l’interface

Les 4 types de disposition sont accessibles via le bouton :gear: de chaque étage :

| Valeur | Nom affiché | Description |

|—|—|—|

| side_by_side | Côte à côte | Grille rectangulaire standard, toutes les bouteilles alignées (défaut) |

| alternating | Tête-bêche | Rangées alternées décalées verticalement — imite les casiers en bois |

| alternating_2d | Tête-bêche alterné | Décalage en échiquier case par case |

| quinconce | Quinconce | Rangées impaires décalées d’une demi-bouteille — disposition optimale en tonneau |

Ces valeurs sont stockées dans les données de la cave (non dans le YAML de la carte) et se modifient depuis l’UI.


Exemple complet :


type: custom:millesime-card

bottle_style: dot

bottle_label: vintage

Si tu es interessé, je peux te faire un PR

3 « J'aime »

Bonjour, je vais regarder pour intégrer toutes les modifications. Je te dis quand tout sera en ligne.

Merci pour tes retours

1 « J'aime »

Salut,

Je vais regarder pour prendre en compte tous les retours et améliorer l’intégration.

Je vous dis quand la v6 sera opérationnelle, car je n’ai pas d’Android et je ne peux pas tester.

Merci pour tes retours

1 « J'aime »