L'objectif de ce document est de documenter l'architecture de l'application tic4eebus.
Périmètre de l'Application
L'application tic4eebus permet de limiter une borne de véhicule électrique (VE) en fonction de l'énergie disponible fournie par un compteur Linky.
Le logiciel implémente le cas d'utilisation OPEV de la norme EEBUS en agissant en tant que gestionnaire d'énergie (Energy Guard) pour piloter la borne VE (CEM) en fonction des données lues sur le compteur Linky (Smart Meter).
Vue d'Ensemble de l'Architecture
Description Générale
Cas d'utilisation
L'application tic4eebus interagit avec cinq acteurs :
L'Horloge qui gère le déclenchement des fonctionnalités du gestionnaire d'énergie
Le Système de fichier qui permet de conserver les données de l'application
La Base de données qui permet d'accèder aux données de l'application
l'API TIC2WebSocket qui fournit les données métrologique du compteur Linky
la Stack EEBUS qui gère l'accès à la borne de recharge et au véhicule électrique
L'acteur Horloge permet de :
Déclencher l'ajustement de l'énergie disponible
L'acteur Système de fichier permet de :
Conserver les données métier de l'application
L'acteur Base de données permet de :
Accèder aux données métier de l'application (visualisation, traitement ...)
L'acteur API TIC2WebSocket permet de :
Recevoir les données du compteur Linky
L'acteur Stack EEBUS permet :
Limiter la charge du véhicule électrique
Principaux Composants
L'application tic4eebus contient :
Le composant main qui se charge du démarrage et de l'arrêt du programme
Le composant config qui permet de charger l'ensemble des configurations de l'application
Le composant ems qui contient le gestionnaire d'énergie de l'application
Le composant ems.data qui gère le modèle de données de l'application
Le composant linkymeter qui permet de recevoir les données du compteur Linky
Le composant evse qui permet l'accès à la borne de recharge et au véhicule électrique
Elle utilise deux dépendances externes principales :
Le composant TIC2WebSocket qui permet de recevoir les trames venant de la Télé Information Client (TIC) d'un compteur
Le composant eebus-go qui permet de communiquer en EEBUS avec un équipement (borne de recharge et véhicule)
Vue Détaillée de l'Architecture
Composant main
Description
Le composant main est le composant chargé du lancement et de l'arrêt du programme.
Au lancement, il gère:
Interprétation de la ligne de commande (fonction main.parseCommandLine)
Chargement de la configuration (fonction config.LoadConfig)
Initialisation des journaux de bord (fonction main.initLogger)
Lancement du gestionnaire d'énergie (méthode Start de la classe ems.EnergyGuard)
A l'arrêt, il gère:
L'arrêt du gestionnaire d'énergie (méthode Stop de la classe ems.EnergyGuard)
Dépendances
Dépendances internes
Le module main utilise 2 dépendances internes :
Le module config
Le module ems
Dépendances externes
Le module main utilise 2 dépendances externes :
Le paquet file-rotatelogs pour la rotation des journaux de bord
Le paquet logrus pour la gestion des journaux de bord
Diagramme de Classe
Le diagramme de classe suivant décrit le composant main et ses dépendances internes :
Composant configuration
Description
Le composant config est le composant qui s'occupe du chargement de l'ensemble des configurations de l'application.
Il utilise :
La configuration de l'algorithme de protection des surcharges implémentant le cas d'utilisation OPEV de la norme EEBUS (classe config.OverloadProtectionConfig)
La configuration de l'accès aux données du véhicule électrique (classe config.VehicleConfig)
La configuration de l'accès aux données de la borne de recharge (classe config.WallboxConfig)
La configuration des journaux de bord de l'application (classe config.LogConfig)
La configuration de la sauvegarde du modèle de données de l'application (classe config.DataModelConfig)
La configuration de l'accès à la TIC du compteur Linky (classe config.TeleInformationClientConfig)
La configuration de la communication EEBUS (classe config.EEBUSConfig)
Dépendances
Dépendances internes
Le module config n'a pas de dépendances internes.
Dépendances externes
Le module config utilise 2 dépendances externes :
Le paquet logrus pour utiliser le niveau de journalisation souhaité
Le paquet yaml pour décoder le fichier de configuration au format YAML
Diagramme de Classe
Le diagramme de classe suivant décrit le composant config et ses dépendances internes :
Composant linkymeter
Description
Le composant linkymeter est le composant chargé de l'accès aux données du compteur Linky.
Il gère :
L'accès à l'interface (serveur websocket) fournie par l'application TIC2WebSocket (classe linkymeter.TIC2WebSocketClient)
La récupération des données du compteur à partir des messages envoyés par TIC2WebSocket (fonction linkymeter.ComputeMeterData)
Dépendances
Dépendances internes
Le module linkymeter n'utilise aucune dépendance interne.
Dépendances externes
Le module linkymeter utilise 4 dépendances externe :
Le paquet uuid pour la génération d'identifiant unique utilisé pour la souscription à un compteur auprès de l'application TIC2WebSocket
Le paquet websocket pour la gestion du client websocket qui accède à l'application TIC2WebSocket
Le paquet mapstructure pour la conversion de dictionnaire en structure de données
Le paquet logrus pour le journal de bord de l'application
Diagramme de Classe
Le diagramme de classe suivant décrit le composant linkymeter et ses dépendances internes :
Composant evse
Description
Le composant evse est le composant chargé de la lecture des données de la borne de recharge et du véhicule électrique.
Il utilise :
La configuration de la borne de recharge (classe config.WallboxConfig)
La configuration du véhicule électrique (classe config.VehiculeConfig)
Le composant borne de recharge qui gère les message EEBUS liés à la borne (classe evse.Wallbox)
Le composant véhicule électrique qui gère les message EEBUS liés au véhicule (classe evse.Vehicle)
Dépendances
Dépendances internes
Le module evse utilise 1 dépendance interne :
Le module config
Dépendances externes
Le module evse utilise 5 dépendances externes :
Le paquet eebus-go pour le service EEBUS et les cas d'utilisation EEBUS (EVSECC, EVCC, EVCEM, OPEV) EEBUS
Le paquet spine-go pour l'accès aux équipements et entité EEBUS permettant la récupération d'information (état fonctionnel de la borne, standard de communication du VE, résultat de la limitation du VE)
Le paquet gocron pour le lancement d'un tâche périodique de lecture des informations du VE et de la borne de recharge
Le paquet uuid pour l'identifiant unique de souscription aux informations du VE et de la borne de recharge
Le paquet logrus pour le journal de bord de l'application concernant le VE et la borne de recharge
Diagramme de Classe
Le diagramme de classe suivant décrit le composant synchroniser et ses dépendances internes :
Composant ems
Description
Le composant ems est le composant qui implémente le gestionnaire d'énergie appelé Energy Guard dans la norme EEBUS.
Il utilise :
La configuration globale de l'application (classe config.Config)
Le client TIC2WebSocket pour recevoir les données du compteur Linky (classe linkymeter.Tic2WebSocketClient)
La conversion des données brutes du compteur Linky en données métier (fonction linkymeter.ComputeMeterData)
La sauvegarde des données de l'application (classe ems.data.DataSynchronizer))
La récupération les données du véhicule électrique (classe evse.Vehicle)
La récupération les données de la borne de recharge (classe evse.Wallbox)
Dépendances
Dépendances internes
Le composant ems utilise 4 dépendances interne :
Le paquet config
Le paquet linkymeter
Le paquet evse
Le paquet ems.data
Dépendances externes
Le composant ems utilise 7 dépendances externes :
Le paquet eebus-go pour la gestion du service EEBUS et le le diagnostique du gestionnaire d'énergie
Le paquet ship-go pour la définition du service EEBUS distant et l'état de la connexion distante
Le paquet spine-go pour l'interface de l'entité EEBUS locale et les informations de résultat de l'écriture de la consigne de limitation de courant du VE
Le paquet gocron pour le lancement de la tâche de régulation périodique de la limitation de la charge du VE
Le paquet cmp pour détecter les modifications des informations du VE et de la borne de recharge
Le paquet uuid pour l'identifiant unique de souscription aux informations du gestionnaire d'énergie
Le paquet logrus pour le journal de bord de l'application concernant le gestionnaire d'énergie
Diagramme de Classe
Le diagramme de classe suivant décrit le composant ems et ses dépendances internes :
Composant ems.data
Description
Le composant ems.data est le composant qui sauvegarde le modèle de données de l'application.
Il utilise :
La configuration du modèle de données de l'application (classe config.DataModelConfig)
Le modèle de données de l'application (classe ems.data.DataModel)
L'interface de gestion du modèle de données (classe ems.data.DataSynchronizer)
L'interface de sauvegarde du modèle de données dans un fichier CSV (classe ems.data.CsvWriter)
L'interface de sauvegarde du modèle de données dans une base de données InfluxDb (classe ems.data.InfluxDbWriter)
Dépendances
Dépendances internes
Le composant ems utilise 3 dépendances interne :
Le paquet config
Le paquet linkymeter
Le paquet evse
Dépendances externes
Le composant ems utilise 6 dépendances externes :
Le paquet eebus-go pour les types de données liées au véhicule électrique et à la borne de recharge
Le paquet spine-go pour les types de données liées au diagnostique, à la limitation de la charge du VE et à l'état fonctionnel de la borne de recharge
Le paquet logrus pour le journal de bord de l'application concernant le modèle de données
Diagramme de Classe
Le diagramme de classe suivant décrit le composant ems.data et ses dépendances internes :
Modèles d'Interaction
Diagrammes de Séquence
Les diagrammes de séquence permettent d'illustrer les interactions entre les composants concernant :
Le lancement de l'application
L'arrêt de l'application
Le démarrage du gestionnaire d'énergie
L'arrêt du gestionnaire d'énergie
La régulation périodique du gestionnaire d'énergie
Lancement de l'application
Le lancement de l'application est décrit par le diagramme de séquence suivant :
Arrêt de l'application
L'arrêt de l'application est décrit par le diagramme de séquence suivant :
Lancement du gestionnaire d'énergie
Le lancement du gestionnaire d'énergie est décrit par le diagramme de séquence suivant :
Arrêt du gestionnaire d'énergie
L'arrêt du gestionnaire d'énergie est décrit par le diagramme de séquence suivant :
Régulation périodique du gestionnaire d'énergie
La régulation périodique du gestionnaire d'énergie est expliquée par le logigramme ci-dessous :
La régulation périodique du gestionnaire d'énergie est décrit en détail par le diagramme de séquence suivant :
Infrastructure Technique
Langages de Programmation
Le projet tic4eebus est intégralement développé en go.
Il est compatible avec les versions go 1.23 et ultérieures.
Base de Données
La base de données utilisée pour accèder au modèle de données de l'application est une base InfluxDb.
Sa structure ne comporte qu'une seule base (bucket nommé demo-bucket) et une seule table (measurement nommé EnergyGuard) appartenant à la même organisation "demo-org".
Les données disponibles dans la table sont les suivantes :
L'application tic4eebus est installable sur de multiples plateformes (Raspberry Pi, PAC, PC Windows, Mac)
Sécurité
Mesures de Sécurité
L'ensemble de la communication avec la borne de recharge est sécurisée (voir norme EEBUS)
Gestion des Accès
L'application tic4eebus accède à la borne de recharge via son SKI qui est dans le fichier de configuration chargé au démarrage de l'application.
Gestion des Erreurs et Surveillance
Gestion des Erreurs
Au moment de la régulation périodique il y a 6 erreurs principales possibles:
La perte de connexion avec TIC2WebSocket qui fourni les données du compteur Linky
L'absence de flux TIC avec le compteur Linky dans le TIC2WebSocket
L'absence de message venant du compteur Linky dans le TIC2WebSocket
La perte de connexion EEBUS avec la borne de recharge de véhicule électrique
La non implémentation du cas d'utilisation OPEV de la norme EEBUS par la borne de recharge
L'échec d'application de la limitation du courant du véhicule électrique
Tous les erreurs sont tracés dans le journal de bord de l'application.
Chacune de ces erreurs modifie les données de diagnostique du gestionnaire d'énergie.
Lorsque l'état fonctionnel du gestionnaire d'énergie est en erreur (voir failure dans le tableau) la borne de recharge limite le véhicule électrique avec le courant minimal de recharge.
Perte de connexion avec TIC2WebSocket
Le client WebSocket Tic2WebSocketClient de l'application tic4eebus se connecte au serveur WebSocket de l'application TIC2WebSocket pour récupérer les données métier du compteur Linky.
Si la connexion avec le serveur échoue ou si elle se coupe alors l'application tic4eebus ne peux pas recevoir les données métier du compteur Linky.
Une tentative de reprise de connexion périodique est réalisée jusqu'à l'établissement de la connexion.
Absence de flux TIC du compteur dans TIC2WebSocket
Après connexion du client WebSocket Tic2WebSocketClient de l'application tic4eebus avec le serveur WebSocket de l'application TIC2WebSocket une requête est envoyé pour récupérer la liste des flux TIC disponible.
Lorsqu'aucun flux n'est disponible ou lorsque le compteur spécifié n'est pas présent dans les flux TIC disponible la récupération des données métier du compteur Linky n'est pas possible.
Des requêtes périodiques pour lister les flux TIC disponible sont exécutées jusqu'à la détection d'un compteur ou du compteur spécifié.
Absence de message venant du compteur dans TIC2WebSocket
Après souscription du client WebSocket Tic2WebSocketClient de l'application tic4eebus auprès du serveur WebSocket de l'application TIC2WebSocket à un compteur les messages contenant les données métier sont récupérés périodiquement (avec une période variant entre 1 et 3 secondes).
Lorsque le compteur Linky n'a pas envoyé de message (trame TIC) pendant 10 secondes les données métier du compteur sont caduques et on considère qu'il y a absence de données du compteur.
Lorsqu'un message (trame TIC) est reçu de nouveau l'absence de message s'arrête et la régulation périodique du gestionnaire d'énergie reprend normalement.
Perte de connexion avec la borne de recharge
Au démarrage de l'application tic4eebus le service EEBUS se connecte à la borne de recharge.
Lorsque la connexion avec la borne de recharge échoue ou se coupe alors l'application tic4eebus ne peut plus réguler la limitation de la charge du véhicule électrique.
Une tentative de reprise de connexion périodique avec la borne de recharge est réalisée par le service EEBUS.
Non implémentation de cas d'utilisation OPEV EEBUS dans la borne de recharge
Au démarrage de l'application tic4eebus le service EEBUS se connecte à la borne de recharge.
Lorsque la connexion avec la borne de recharge est établie les cas d'utilisation de la norme EEBUS implémenté par la borne peuvent être récupérés (pas sur toutes les bornes).
Lorsqu'un véhicule électrique se connecte de nouvelles notifications apparaissent pour renseigner sur les cas d'utilisation EEBUS lié au véhicule électrique.
Le cas d'utilisation OPEV qui nous intéresse permet de limiter la charge du véhicule électrique.
Si ce cas d'utilisation n'est pas implémenté alors la régulation du véhicule n'est pas possible.
Echec d'application de la limitation de charge du véhicule électrique
Dans la régulation périodique du gestionnaire d'énergie, la valeur de la limitation de courant du véhicule est calculée puis appliquée si elle est différent de la valeur limitation actuelle.
Pendant l'application de la limitation de courant la requête peut être rejetée et donc la régulation non opérationnelle.
La régulation périodique continue malgré tout en espérant que la prochaine requête d'application de la limitation de courant ne soit pas rejetée.
Outils de Surveillance
En l'état actuel, il n'y a pas d'outil pour surveiller l'état et les performances de l'application.
Évolutivité
Stratégies d'Évolutivité
Plusieurs axes d'évolution sont possibles :
Fournir l'état de l'application
Prendre en compte le courant soutiré par le véhicule dans la régulation périodique
Conclusion
L'application tic4eebus est une implémentation multi-plateforme qui permet d'implémenter le cas d'utilisation OPEV avec un compteur Linky et une borne de recharge compatible EEBUS.