# Récupérer la consommation eau avec Veolia

**URL:** <https://community.homey.app/t/recuperer-la-consommation-eau-avec-veolia/104678>\
**Category:** Questions & Aide\
**Created:** [February 23, 2024, 8:19am UTC](https://community.homey.app/t/recuperer-la-consommation-eau-avec-veolia/104678 "2024-02-23T08:19:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Julien\_31](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/julien_31/32/79652_2.png) [@Julien\_31](https://community.homey.app/u/Julien_31)\
**Post date:** [February 23, 2024, 8:19am UTC](https://community.homey.app/t/recuperer-la-consommation-eau-avec-veolia/104678/1 "2024-02-23T08:19:19Z")

</div>

Bonjour,

Je souhaiterais savoir si quelqu’un récupère la consommation en eau avec l’application Veolia ?

Est il possible de générer un script ou autre ?

Cela a déjà été réalisé sur Jeedom : [Jeedom Market](https://market.jeedom.com/index.php?v=d&p=market_display&id=4331)

---

<div class="post-metadata">

**Author:** ![Julien\_31](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/julien_31/32/79652_2.png) [@Julien\_31](https://community.homey.app/u/Julien_31)\
**Post date:** [April 12, 2026, 7:10am UTC](https://community.homey.app/t/recuperer-la-consommation-eau-avec-veolia/104678/2 "2026-04-12T07:10:15Z")

</div>

@SergeP @Herve_Domotique voici un script généré par IA (claude) pour récupérer la consommation en eau de Veolia.

Il faut d’abord **créer la variable** dans Homey, puis **exécuter le vrai script Veolia** qui va la remplir.

**Étape 1** — Allez dans Homey app → **Paramètres → Variables** et créez ces variables :

| Nom | Type |
| --- | --- |
| `conso_eau_historique` | Texte |
| `conso_eau_litres` | Nombre |
| `conso_eau_date` | Texte |
| `conso_eau_moyenne7j` | Nombre |
| `conso_eau_alerte` | Oui/Non |
| `conso_eau_alerte_message` | Texte |

**Étape 2** — sur la Page Veolia en faisant F12 ou mode développeur

1. Se connecter à son compte

2. Observer la requête envoyée à `cognito-idp.eu-west-3.amazonaws.com`

3. Dans le corps de la requête on voit en clair :

json

```auto
{
  "ClientId": "1XXXXXX8",
  "AuthFlow": "USER_PASSWORD_AUTH",
  ...
}

```

 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/9/a/9adf6106b9e5c59522f5ec6be655904235f644de.png)

```auto
// ============================================
// VEOLIA CONSO EAU - V2 
// Basée sur la V1 fonctionnelle, enrichie avec :
// - Calcul coût TTC détaillé (eau + assainissement + redevances + TVA)
// - Détection fuite nocturne (si data horaire dispo)
// - Moyennes glissantes 7j/30j + tendance
// - Statistiques mensuelles (cumul mois en cours)
// - Gestion d'erreur avec flag d'échec pour flows d'alerte
// - Tags enrichis pour exploitation par d'autres flows
// ============================================

// --- CREDENTIALS (inchangés) ---

const EMAIL = 'email a renseigner';
const PASSWORD = 'mdp';
const COGNITO_CLIENT_ID = 'a renseigner';
const COGNITO_REGION = 'eu-west-3';
const ABO_ID = 'a renseigner';
const NUMERO_PDS = '003L5HS';
const DATE_DEBUT_ABO = '2020-11-30';

// --- SEUILS ---
const SEUIL_ALERTE_L = 300; // seuil conso jour
const SEUIL_FUITE_NUIT_L = 50; // litres entre 23h-6h → fuite probable
const SEUIL_ECART_MOY_PCT = 50; // % au-dessus moy 7j → alerte tendance

// --- TARIFS EAU 2026 (à ajuster selon ta facture Veolia) ---
// Vérifie sur ta dernière facture Veolia et mets à jour ces valeurs
const TARIF = {
  eau_potable_m3: 2.10, // €/m³ HT - part variable eau
  assainissement_m3: 1.85, // €/m³ HT - part variable assainissement
  redevance_pollution: 0.35, // €/m³ HT
  redevance_modernisation: 0.155, // €/m³ HT
  tva_eau: 0.055, // 5,5%
  tva_assainissement: 0.10, // 10%
};

// --- WEBHOOK (inchangé) ---
const WEBHOOK_ALERTE = 'https://webhook.homey.app/64a8011093db150b8f20a51a/alerte_eau';

// ============================================
// FONCTIONS (auth + conso inchangées)
// ============================================

async function getToken() {
  const res = await fetch(`https://cognito-idp.${COGNITO_REGION}.amazonaws.com/`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-amz-json-1.1',
      'X-Amz-Target': 'AWSCognitoIdentityProviderService.InitiateAuth'
    },
    body: JSON.stringify({
      AuthFlow: 'USER_PASSWORD_AUTH',
      ClientId: COGNITO_CLIENT_ID,
      AuthParameters: { USERNAME: EMAIL, PASSWORD: PASSWORD }
    })
  });
  if (!res.ok) throw new Error('Login échoué: ' + res.status);
  const data = await res.json();
  return data.AuthenticationResult.AccessToken;
}

async function getConsommation(token) {
  const now = new Date();
  const mois = now.getMonth() + 1;
  const annee = now.getFullYear();
  const url = `https://prd-ael-sirius-backend.istefr.fr/consommations/${ABO_ID}/journalieres?mois=${mois}&annee=${annee}&numero-pds=${NUMERO_PDS}&date-debut-abonnement=${DATE_DEBUT_ABO}`;
  const res = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json',
      'Origin': 'https://eaudetm.monespace.eau.veolia.fr'
    }
  });
  if (!res.ok) throw new Error('Récupération conso échouée: ' + res.status);
  return await res.json();
}

// --- CALCUL COÛT TTC DÉTAILLÉ ---
function calculerCout(litres) {
  const m3 = litres / 1000;
  const eau_ht = m3 * TARIF.eau_potable_m3;
  const assain_ht = m3 * TARIF.assainissement_m3;
  const redev_ht = m3 * (TARIF.redevance_pollution + TARIF.redevance_modernisation);

  const eau_ttc = eau_ht * (1 + TARIF.tva_eau);
  const assain_ttc = assain_ht * (1 + TARIF.tva_assainissement);
  const redev_ttc = redev_ht * (1 + TARIF.tva_eau);

  return {
    eau_ttc: +eau_ttc.toFixed(3),
    assain_ttc: +assain_ttc.toFixed(3),
    redev_ttc: +redev_ttc.toFixed(3),
    total_ttc: +(eau_ttc + assain_ttc + redev_ttc).toFixed(2),
  };
}

// --- TENDANCE (compare 3 derniers jours vs 3 précédents) ---
function calculerTendance(historique) {
  if (historique.length < 6) return 'stable';
  const recent = historique.slice(-3).reduce((s, e) => s + e.litres, 0) / 3;
  const avant = historique.slice(-6, -3).reduce((s, e) => s + e.litres, 0) / 3;
  const diff = ((recent - avant) / avant) * 100;
  if (diff > 15) return 'hausse';
  if (diff < -15) return 'baisse';
  return 'stable';
}

// ============================================
// MAIN
// ============================================
try {
  log('🔐 Connexion...');
  const token = await getToken();

  log('💧 Récupération conso...');
  const data = await getConsommation(token);

  if (!Array.isArray(data) || data.length === 0) {
    throw new Error('Données Veolia vides');
  }

  const dernierReleve = data[data.length - 1];
  const litres = dernierReleve.consommation.litre;
  const date = dernierReleve.date_releve;

  // ---- Historique persistant via global ----
  let historique = global.get('conso_eau_historique') || [];
  if (typeof historique === 'string') {
    try { historique = JSON.parse(historique); } catch(e) { historique = []; }
  }

  historique = historique.filter(e => e.date !== date);
  historique.push({ date, litres });
  if (historique.length > 31) historique = historique.slice(-31);
  global.set('conso_eau_historique', historique);

  // ---- Moyennes ----
  const sept = historique.slice(-7).map(e => e.litres);
  const moy7j = Math.round(sept.reduce((s, v) => s + v, 0) / sept.length);
  const moy30j = Math.round(historique.map(e => e.litres).reduce((s, v) => s + v, 0) / historique.length);
  const tendance = calculerTendance(historique);

  // ---- Cumul du mois en cours ----
  const moisCourant = date.substring(0, 7); // "2026-04"
  const cumulMoisL = historique
    .filter(e => e.date.startsWith(moisCourant))
    .reduce((s, e) => s + e.litres, 0);
  const cumulMoisM3 = +(cumulMoisL / 1000).toFixed(3);

  // ---- Coûts ----
  const coutJour = calculerCout(litres);
  const coutMois = calculerCout(cumulMoisL);
  const coutMoy7j = calculerCout(moy7j);

  // ---- Détection fuite nocturne (si data horaire dispo sur le dernier relevé) ----
  let litresNuit = 0;
  let fuiteDetectee = false;
  if (Array.isArray(dernierReleve.detail_horaire)) {
    litresNuit = dernierReleve.detail_horaire
      .filter(h => h.heure >= 23 || h.heure < 6)
      .reduce((s, h) => s + (h.litres || h.consommation || 0), 0);
    fuiteDetectee = litresNuit > SEUIL_FUITE_NUIT_L;
  }

  // ---- Sauvegardes globales ----
  global.set('conso_eau_moy7j', moy7j);
  global.set('conso_eau_moy30j', moy30j);
  global.set('conso_eau_tendance', tendance);
  global.set('conso_eau_cumul_mois_l', cumulMoisL);
  global.set('conso_eau_cout_jour', coutJour.total_ttc);
  global.set('conso_eau_cout_mois', coutMois.total_ttc);
  global.set('conso_eau_script_ok', true);

  // ---- Tags pour les Flows ----
  await tag('conso_eau_litres', litres);
  await tag('conso_eau_date', date);
  await tag('conso_eau_moyenne7j', moy7j);
  await tag('conso_eau_moyenne30j', moy30j);
  await tag('conso_eau_tendance', tendance);
  await tag('conso_eau_cumul_mois_m3', cumulMoisM3);
  await tag('conso_eau_cout_jour_eur', coutJour.total_ttc);
  await tag('conso_eau_cout_mois_eur', coutMois.total_ttc);
  await tag('conso_eau_litres_nuit', litresNuit);

  // ---- Logs ----
  log(`📅 Date : ${date}`);
  log(`💧 Conso jour : ${litres} L (${(litres/1000).toFixed(3)} m³)`);
  log(`💰 Coût jour TTC : ${coutJour.total_ttc}€ (eau ${coutJour.eau_ttc} + assain ${coutJour.assain_ttc} + redev ${coutJour.redev_ttc})`);
  log(`📊 Moyenne 7j : ${moy7j} L (${coutMoy7j.total_ttc}€/j)`);
  log(`📊 Moyenne 30j : ${moy30j} L`);
  log(`📈 Tendance 3j : ${tendance}`);
  log(`🗓️ Cumul ${moisCourant} : ${cumulMoisM3} m³ (${coutMois.total_ttc}€ TTC)`);
  log(`📦 Historique : ${historique.length} jour(s)`);
  if (litresNuit > 0) log(`🌙 Conso nuit : ${litresNuit} L`);

  // ---- Alertes ----
  let alerteMsg = null;
  let alerteType = null;

  if (fuiteDetectee) {
    alerteMsg = `🚨 FUITE PROBABLE : ${litresNuit}L consommés entre 23h et 6h le ${date}`;
    alerteType = 'fuite';
  } else if (litres > SEUIL_ALERTE_L) {
    alerteMsg = `⚠️ Conso eau élevée le ${date} : ${litres}L (seuil ${SEUIL_ALERTE_L}L, moy 7j ${moy7j}L, ${coutJour.total_ttc}€)`;
    alerteType = 'seuil';
  } else if (moy7j > 0 && ((litres - moy7j) / moy7j) * 100 > SEUIL_ECART_MOY_PCT) {
    const ecart = Math.round(((litres - moy7j) / moy7j) * 100);
    alerteMsg = `📈 Conso eau anormale : ${litres}L soit +${ecart}% vs moyenne 7j (${moy7j}L)`;
    alerteType = 'tendance';
  }

  if (alerteMsg) {
    global.set('conso_eau_alerte_message', alerteMsg);
    global.set('conso_eau_alerte_type', alerteType);
    await tag('conso_eau_alerte', true);
    await tag('conso_eau_alerte_message', alerteMsg);
    await fetch(WEBHOOK_ALERTE);
    log('🚨 ALERTE envoyée : ' + alerteMsg);
  } else {
    global.set('conso_eau_alerte_message', '');
    global.set('conso_eau_alerte_type', '');
    await tag('conso_eau_alerte', false);
    await tag('conso_eau_alerte_message', '');
    log('✅ Consommation normale');
  }

  log('✅ Terminé !');
  return litres;

} catch(err) {
  log('❌ Erreur : ' + err.message);
  // Marquer l'échec pour qu'un flow de supervision puisse détecter
  global.set('conso_eau_script_ok', false);
  global.set('conso_eau_script_erreur', err.message);
  global.set('conso_eau_script_erreur_date', new Date().toISOString());
  throw err; // relance pour que le flow voie l'erreur
}

```

* * *

Les flows

* * *

 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/4/2/4280a47ffc62166bb8e287e8e7130d0c94478759.png)

 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/4/2/42de7926ee56019bd68cdf98fcc745aa0405d47d.png)

---

<div class="post-metadata">

**Author:** ![ARTNOW444](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/artnow444/32/132916_2.png) [@ARTNOW444](https://community.homey.app/u/ARTNOW444)\
**Post date:** [April 16, 2026, 5:45am UTC](https://community.homey.app/t/recuperer-la-consommation-eau-avec-veolia/104678/3 "2026-04-16T05:45:28Z")

</div>

Bonjour , bravo pour ton boulot , pas utile pour moi mais ton approche technique (f12) que j’utilise aussi pour l’appli stellantis , est intéressante bonne journée
