Memoire de mesures : PostgreSQL et InfluxDB sur le second Synology

Le proprietaire a tranche : on met les deux en service et on decidera a l usage
s il faut garder les deux. Elles ne repondent pas a la meme question.

PostgreSQL garde ce que n8n CALCULE — sorties du bilan, decisions du
controleur, prevision telle qu elle a ete publiee — parce que ce ne sont pas des
capteurs, donc qu aucune statistique Home Assistant ne les retient, et parce que
ce sont des vecteurs, du texte et des jointures. Cinq tables, une vue de confort
qui repond a la question restee sans reponse le 03/09 : ce que le bilan exigeait
contre le SOC reellement atteint, heure par heure.

InfluxDB garde ce que Home Assistant OBSERVE, a la resolution native et sur tout
le perimetre energie, y compris les entites auxquelles personne n a encore
pense. C est exactement ce qui a manque le 03/09, quand les modes des chargeurs
MPPT se sont reveles etre le bon signal alors que personne ne les enregistrait.

Les deux sur 10.10.10.22 : cette machine ne porte qu un service, quand
10.10.10.17 en porte quatre. Le volume n est pas l argument, les deux Synology
ont des teraoctets libres.

L alimentation de PostgreSQL ne passe volontairement PAS par n8n. Tout ce que
n8n calcule, il le publie deja dans des helpers Home Assistant : les lire donne
la meme information sans toucher aux trois workflows de production stabilises
hier soir ni creer d identifiant dans n8n. L horodatage retenu est celui de Home
Assistant et non celui du sondage, si bien qu une valeur inchangee porte la meme
clef primaire et n est pas reecrite : on enregistre quand la grandeur bouge, pas
quand on regarde.

Essai a blanc verifie sur l installation reelle : 15 mesures, 1 ligne de bilan,
1 decision, 2 previsions, avec les bonnes dates. Le mode blanc comptait d abord
les lignes ecrites, donc zero par construction — corrige pour compter ce qu il
ecrirait, sans quoi il ne verifiait rien.

Le branchement de Home Assistant sur InfluxDB demande un redemarrage et n est
donc PAS applique : le fichier de configuration est pret, a poser en milieu de
matinee, jamais entre 01:24 et 07:24.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-09-04 01:11:09 +02:00
parent b27c91a3f6
commit 230039d2a2
9 changed files with 817 additions and 2 deletions

View File

@@ -0,0 +1,124 @@
# 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: