Skip to content

Commit 71bd1c0

Browse files
committed
add charging station output mapping
1 parent 53463c4 commit 71bd1c0

8 files changed

+728
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ env/
99
modules/osm_pbf_parser/osm_pbf_parser.*.so
1010
doc/.ipynb_checkpoints
1111
.pytest_cache/
12+
.idea

Makefile

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# Makefile pour Osmose-Backend
2+
# Permet d'installer les dépendances, vérifier Docker Compose et construire les conteneurs
3+
4+
.PHONY: all install check-docker-compose build-docker help install-system-deps install-python-deps create-venv
5+
6+
# Couleurs pour les messages
7+
YELLOW=\033[1;33m
8+
GREEN=\033[1;32m
9+
RED=\033[1;31m
10+
NC=\033[0m # No Color
11+
12+
# Variables
13+
VENV_NAME=osmose-backend-venv
14+
DOCKER_COMPOSE_MIN_VERSION=1.29.0
15+
16+
all: help
17+
18+
help:
19+
@echo "${YELLOW}Osmose-Backend - Makefile d'installation${NC}"
20+
@echo ""
21+
@echo "Commandes disponibles:"
22+
@echo " ${GREEN}make install${NC} - Installe toutes les dépendances nécessaires"
23+
@echo " ${GREEN}make install-system-deps${NC} - Installe les dépendances système (Debian/Ubuntu)"
24+
@echo " ${GREEN}make install-python-deps${NC} - Installe les dépendances Python"
25+
@echo " ${GREEN}make create-venv${NC} - Crée et configure un environnement virtuel Python"
26+
@echo " ${GREEN}make check-docker-compose${NC} - Vérifie si Docker Compose est installé"
27+
@echo " ${GREEN}make build-docker${NC} - Construit les conteneurs Docker"
28+
@echo ""
29+
30+
install: install-system-deps create-venv install-python-deps check-docker-compose
31+
@echo "${GREEN}Installation terminée avec succès!${NC}"
32+
33+
install-system-deps:
34+
@echo "${YELLOW}Installation des dépendances système...${NC}"
35+
@if command -v apt-get >/dev/null 2>&1; then \
36+
sudo apt-get update && \
37+
sudo apt-get install -y git postgis python3 python3-dev python3-virtualenv \
38+
build-essential libpq-dev protobuf-compiler libprotobuf-dev \
39+
g++ libboost-python-dev libosmpbf-dev make pkg-config \
40+
openjdk-11-jre-headless cmake extra-cmake-modules qtbase5-dev flex bison libarchive-dev; \
41+
echo "${GREEN}Dépendances système installées avec succès.${NC}"; \
42+
else \
43+
echo "${RED}Système non supporté. Veuillez installer manuellement les dépendances requises.${NC}"; \
44+
exit 1; \
45+
fi
46+
47+
create-venv:
48+
@echo "${YELLOW}Création de l'environnement virtuel Python...${NC}"
49+
@if [ -d "$(VENV_NAME)" ]; then \
50+
echo "${YELLOW}L'environnement virtuel existe déjà.${NC}"; \
51+
else \
52+
python3 -m virtualenv --python=python3 $(VENV_NAME); \
53+
echo "${GREEN}Environnement virtuel créé avec succès.${NC}"; \
54+
fi
55+
@echo "${YELLOW}Pour activer l'environnement virtuel, exécutez:${NC}"
56+
@echo "source $(VENV_NAME)/bin/activate"
57+
58+
install-python-deps:
59+
@echo "${YELLOW}Installation des dépendances Python...${NC}"
60+
@if [ -d "$(VENV_NAME)" ]; then \
61+
. $(VENV_NAME)/bin/activate && pip install -r requirements.txt && pip install -r requirements-dev.txt; \
62+
echo "${GREEN}Dépendances Python installées avec succès.${NC}"; \
63+
else \
64+
echo "${RED}L'environnement virtuel n'existe pas. Exécutez 'make create-venv' d'abord.${NC}"; \
65+
exit 1; \
66+
fi
67+
@echo "${YELLOW}Compilation du module OMS PBF parser...${NC}"
68+
@cd modules/osm_pbf_parser/ && make
69+
70+
check-docker-compose:
71+
@echo "${YELLOW}Vérification de Docker Compose...${NC}"
72+
@if command -v docker-compose >/dev/null 2>&1; then \
73+
echo "${GREEN}Docker Compose est installé.${NC}"; \
74+
docker-compose --version; \
75+
elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then \
76+
echo "${GREEN}Docker Compose V2 est installé (via docker compose).${NC}"; \
77+
docker compose version; \
78+
else \
79+
echo "${RED}Docker Compose n'est pas installé.${NC}"; \
80+
echo "${YELLOW}Pour installer Docker Compose, suivez les instructions sur:${NC}"; \
81+
echo "https://docs.docker.com/compose/install/"; \
82+
exit 1; \
83+
fi
84+
85+
build-docker:
86+
@echo "${YELLOW}Construction des conteneurs Docker...${NC}"
87+
@if command -v docker-compose >/dev/null 2>&1; then \
88+
cd docker && docker-compose build; \
89+
elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then \
90+
cd docker && docker compose build; \
91+
else \
92+
echo "${RED}Docker Compose n'est pas installé. Impossible de construire les conteneurs.${NC}"; \
93+
exit 1; \
94+
fi
95+
@echo "${GREEN}Construction des conteneurs Docker terminée.${NC}"
96+
@echo "${YELLOW}Pour exécuter Osmose sur un pays (ex: Monaco):${NC}"
97+
@echo "cd docker && docker-compose --project-name monaco run --rm backend ./osmose_run.py --country=monaco"
98+
@echo "${YELLOW}Pour arrêter et supprimer les conteneurs:${NC}"
99+
@echo "cd docker && docker-compose --project-name monaco down"

analysers/analyser_merge_charging_station_FR.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,47 @@ class Analyser_Merge_Charging_station_FR(Analyser_Merge_Point):
3838
"Izivia": "Q86671322",
3939
}
4040

41+
# puisssance max de borne en kW connue
42+
limit_kw_known = 401
43+
44+
def keepMaxValueIfEnum(str):
45+
# si la valeur contient un ; on sépare et on prend la plus haute valeur
46+
if ';' in str:
47+
boom = str.split(';')
48+
max = 0
49+
for p in boom:
50+
p = int(p)
51+
if p > max:
52+
max = p
53+
54+
if max > 0:
55+
str = max
56+
return str
57+
58+
def getPuissanceNominaleInKw(self, puissance_nominale):
59+
# deviner un nombre en kw dans la puissance nominale,
60+
# les valeurs de plus de 401 sont à diviser par mille,
61+
# il faut aussi évacuer le leftpad de 0
62+
if puissance_nominale is None:
63+
return None
64+
puissance_nominale = str(puissance_nominale)
65+
66+
if puissance_nominale is None:
67+
return None
68+
# Convertir en chaîne et supprimer les zéros à gauche
69+
puissance_str = str(puissance_nominale).lstrip('0')
70+
if not puissance_str:
71+
return 0
72+
73+
puissance_str = self.keepMaxValueIfEnum(puissance_str)
74+
# Reconvertir en entier
75+
puissance_nominale = int(puissance_str)
76+
if puissance_nominale > limit_kw_known:
77+
return str(puissance_nominale / 1000 ) + ' kW'
78+
else:
79+
return str(puissance_nominale) + ' kW'
80+
81+
4182
def __init__(self, config, logger=None):
4283
Analyser_Merge_Point.__init__(self, config, logger)
4384
doc = dict(
@@ -85,6 +126,7 @@ def __init__(self, config, logger=None):
85126
"ref:EU:EVSE": "id_station_itinerance"
86127
},
87128
mapping2={
129+
"charging_station:output": lambda fields: self.getPuissanceNominaleInKw(fields["puissance_nominale"]),
88130
"operator:phone": "telephone_operateur",
89131
"operator:email": "contact_operateur",
90132
"start_date": "date_mise_en_service",

tests/run_charging_station_tests.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash
2+
3+
# Script pour exécuter les tests de l'analyseur de bornes de recharge
4+
5+
# Aller au répertoire racine du projet
6+
cd "$(dirname "$0")/.."
7+
8+
# Exécuter les tests unitaires
9+
echo "Exécution des tests unitaires..."
10+
python3 -m unittest tests/test_analyser_merge_charging_station_FR.py
11+
12+
# Exécuter les tests d'intégration
13+
echo "Exécution des tests d'intégration..."
14+
python3 -m unittest tests/test_analyser_merge_charging_station_FR_integration.py
15+
16+
# Vérifier le résultat
17+
if [ $? -eq 0 ]; then
18+
echo "Tous les tests ont réussi !"
19+
exit 0
20+
else
21+
echo "Certains tests ont échoué."
22+
exit 1
23+
fi

0 commit comments

Comments
 (0)