# Mémoire de mesures EVCS — à déployer sur le SECOND Synology (10.10.10.22). # # Deux bases, deux rôles distincts, décidés le 04/09/2026 : # # postgres (proposition A) — ce que n8n CALCULE : sorties du bilan, # décisions du contrôleur, prévision telle qu'elle a été publiée. # Relationnel, donc capable de stocker un vecteur de 24 valeurs, # une raison en texte, un événement daté — et de les JOINDRE. # # influxdb (proposition B) — ce que Home Assistant OBSERVE : chaque # changement d'état, à la résolution native, y compris les entités # auxquelles personne n'a encore pensé. C'est ce qui a manqué le # 03/09, quand les modes des chargeurs MPPT se sont révélés être le # bon signal alors que personne ne les enregistrait. # # ⚠️ NE PAS héberger sur 10.10.10.17 : cette machine porte déjà Home Assistant, # n8n, openclaw et open-webui. Une mémoire qui meurt avec la machine qu'elle # documente ne sert à rien (cf. HANDOFF §32). # # Mise en service : # cd /volume2/projects/EVCS/EVCS/deploy/historisation # cp historisation.env.exemple historisation.env puis y mettre les mots de passe # docker compose up -d # docker compose logs -f # # Vérification : # docker compose exec postgres psql -U evcs -d evcs -c '\dt' # curl -s http://10.10.10.22:8086/health # # Volumes NOMMÉS et non bind-mounts : le démon Docker de DSM refuse un # bind-mount dont le dossier hôte est absent, et une base de données sur un # partage réseau est une mauvaise idée (verrouillage, latence, fsync). services: postgres: image: postgres:16-alpine container_name: evcs-postgres restart: always network_mode: bridge ports: # Ouvert au réseau local : n8n tourne sur 10.10.10.17 et doit écrire ici. - "5432:5432" env_file: - historisation.env environment: - TZ=Europe/Paris - POSTGRES_USER=evcs - POSTGRES_DB=evcs # POSTGRES_PASSWORD vient de historisation.env - PGDATA=/var/lib/postgresql/data/pgdata volumes: - evcs-pgdata:/var/lib/postgresql/data # Appliqué UNE SEULE FOIS, à la création de la base. Pour faire évoluer # le schéma ensuite, écrire une migration et la passer à psql. - ./schema.sql:/docker-entrypoint-initdb.d/10-schema.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U evcs -d evcs"] interval: 1m timeout: 10s retries: 5 influxdb: image: influxdb:2.7-alpine container_name: evcs-influxdb restart: always network_mode: bridge ports: # Home Assistant, sur 10.10.10.17, écrit ici. - "8086:8086" env_file: - historisation.env environment: - TZ=Europe/Paris - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_ORG=airtria - DOCKER_INFLUXDB_INIT_BUCKET=evcs # Rétention 0 = illimitée sur le seau brut. Le sous-échantillonnage se # fait par tâches (voir README), pas en jetant la donnée d'entrée. - DOCKER_INFLUXDB_INIT_RETENTION=0 # DOCKER_INFLUXDB_INIT_USERNAME / _PASSWORD / _ADMIN_TOKEN : env file volumes: - evcs-influx-data:/var/lib/influxdb2 - evcs-influx-config:/etc/influxdb2 healthcheck: test: ["CMD", "influx", "ping"] interval: 1m timeout: 10s retries: 5 # Alimentation de PostgreSQL depuis Home Assistant. Volontairement PAS # depuis n8n : tout ce que n8n calcule, il le publie deja dans des helpers HA # — les lire ici donne la meme information sans toucher aux trois workflows # de production ni creer d'identifiant dans n8n. historisation: image: node:22-alpine container_name: evcs-historisation restart: always working_dir: /app network_mode: bridge depends_on: postgres: condition: service_healthy volumes: # Depot en LECTURE SEULE : ce service n'ecrit que dans la base. - /volume2/projects/EVCS/EVCS:/app:ro env_file: - historisation.env environment: - TZ=Europe/Paris - HA_URL=http://10.10.10.17:8123 - PGHOST=10.10.10.22 - PGPORT=5432 - PGUSER=evcs - PGDATABASE=evcs # PGPASSWORD doit valoir POSTGRES_PASSWORD : les deux sont dans le # fichier d'environnement, tenus egaux a la main. - HISTORISE_INTERVAL_S=60 command: ["node", "tools/historise-evcs.mjs"] volumes: evcs-pgdata: evcs-influx-data: evcs-influx-config: