Pilotage Pompe à chaleur Aldes Tone Air Air via Homeyscript + Retour d'état fiable

Bonjour à tous,

Pour ceux qui possèdent une PAC Aldes T.One (Air/Air ou Aqua) et une Homey Pro, l’intégration native n’est pas toujours disponible ou complète. Je vous propose ici une méthode robuste utilisant Homeyscript pour piloter votre chauffage et surtout avoir un retour d’état fiable, en contournant les problèmes de latence du Cloud Aldes.

Ce tuto couvre :

  1. La récupération de vos identifiants techniques.

  2. Les scripts de commande et de lecture.

  3. La création d’un Thermostat Virtuel.

  4. Les deux Flows nécessaires (Pilotage & Mise à jour).

Prérequis

  • Une Homey Pro.

  • L’app Homeyscript installée.

  • L’app Virtual Devices (pour créer un joli thermostat).

  • Vos identifiants AldesConnect (email et mot de passe).


Étape 1 : Récupérer vos IDs techniques (Script de Scan)

On ne peut pas deviner les identifiants internes de votre machine. Créez ce script temporaire pour les trouver.

  1. Allez dans Homeyscript, créez un nouveau script : Aldes_Scan.

  2. Collez le code ci-dessous en modifiant Email/Mot de passe.

  3. Cliquez sur “Enregistrer et Tester”.

JavaScript

// --- SCAN ALDES V5 (TON API) ---
const username = 'VOTRE EMAIL ALDES'; // Remplace si besoin
const password = 'MDP ALDES';        // Remplace si besoin

async function run() {
  console.log("Connexion API V5...");
  try {
    // 1. Auth (Méthode oauth2/token que tu utilises)
    const tokenRes = await fetch('https://aldesiotsuite-aldeswebapi.azurewebsites.net/oauth2/token/', {
      method: 'POST',
      body: new URLSearchParams({'grant_type': 'password', 'username': username, 'password': password})
    });
    if (!tokenRes.ok) throw new Error('Echec Login');
    const tokenData = await tokenRes.json();

    // 2. Lecture des produits
    const prodRes = await fetch('https://aldesiotsuite-aldeswebapi.azurewebsites.net/aldesoc/v5/users/me/products/', {
        headers: { 'Authorization': `Bearer ${tokenData.access_token}` }
    });
    const products = await prodRes.json();

    // 3. Extraction des Thermostats
    // Ton script allait chercher dans products[0].indicator.thermostats
    const thermostats = products[0].indicator.thermostats;
    const modemId = products[0].serial_number; // Ou mac_address selon les modèles

    console.log("\n---------------------------------");
    console.log(`MODEM ID (à garder) : ${modemId}`); 
    console.log("---------------------------------");
    console.log("VOS THERMOSTATS (Notez les ID) :");
    
    thermostats.forEach((t, index) => {
        // On affiche l'index, l'ID technique, et les températures pour que tu reconnaisses la pièce
        console.log(`Pièce #${index+1} | ID: ${t.ThermostatId} | Temp: ${t.CurrentTemperature}°C | Consigne: ${t.TemperatureSet}°C`);
    });
    console.log("---------------------------------\n");

  } catch (err) {
    console.error("Erreur : " + err.message);
  }
}
await run();

:backhand_index_pointing_right: Dans la console (log) en bas : Cherchez et notez :

  • product_id (souvent sous la forme Pxxxxxx).

  • node_id correspondant à la pièce (Salon, Chambre…) que vous voulez piloter (souvent un chiffre ou un ID long).


Étape 2 : Les Scripts de fonctionnement

Nous allons créer deux scripts. Un pour Envoyer l’ordre, un pour Lire l’état.

A. Script Aldes_Set_Salon (Pour changer la température)

Ce script récupère la température demandée par le Flow via l’argument args[0].

JavaScript

// Script: Aldes_Set_Salon_Final
const username = 'EMAIL ALDES';
const password = 'MDP ALDES';
const aldesThermostatId = VOTRE ID THERMOSTAT; 
const modemId = '289C6E2EAC6C'; 

// --- RECUPERATION INTELLIGENTE ---
// On prend l'argument du Flow en priorité (c'est le plus fiable pour la "Nouvelle Valeur")
// Si pas d'argument, on met 21 par défaut.
let tempToSend = args[0]; 

if (!tempToSend) {
    console.log("⚠️ Aucun argument reçu, utilisation valeur défaut 21");
    tempToSend = 21;
}

// On s'assure que c'est bien un chiffre (pour éviter les bugs de texte)
tempToSend = parseFloat(tempToSend);

async function setTemperature() {
  console.log(`🚀 Envoi vers Aldes : ${tempToSend}°C...`);

  try {
    // 1. Auth Aldes
    const tokenRes = await fetch('https://aldesiotsuite-aldeswebapi.azurewebsites.net/oauth2/token/', {
      method: 'POST',
      body: new URLSearchParams({'grant_type': 'password', 'username': username, 'password': password})
    });
    if (!tokenRes.ok) throw new Error('Echec Auth');
    const tokenData = await tokenRes.json();

    // 2. Patch sur Modem
    const url = `https://aldesiotsuite-aldeswebapi.azurewebsites.net/aldesoc/v5/users/me/products/${modemId}/updateThermostats`;
    const payload = [{
        ThermostatId: aldesThermostatId,
        TemperatureSet: tempToSend
    }];

    const res = await fetch(url, {
        method: 'PATCH',
        headers: { 
            'Authorization': `Bearer ${tokenData.access_token}`,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(payload)
    });

    if(res.ok) {
        console.log("✅ Succès API Aldes");
        // Notification avec la valeur envoyée
        await tag('Retour_Salon', `${tempToSend}° bien pris en compte`);
        return true;
    } else {
        console.log(`❌ Erreur API : ${res.status}`);
        await tag('Retour_Salon', `❌ Erreur Aldes : Code ${res.status}`);
        return false;
    }

  } catch (err) {
    console.error(err);
    await tag('Retour_Salon', `❌ Erreur Script : ${err.message}`);
    return false;
  }
}

await setTemperature();

B. Script Aldes_Update_Salon (Pour lire l’état)

Ce script interroge Aldes et met à jour des Tags Homeyscript que nous utiliserons dans les notifications et le thermostat virtuel.

JavaScript

// Script: Aldes_Update_Salon

const username = 'EMAIL ALDES'; 

const password = 'MDP ALDES'; 

const aldesThermostatId = ID THERMOSTAT; // ID Salon

// NOTE : Pour la lecture, on utilise l'API standard, c'est plus simple

// Si ça bloque, on utilisera le modem ID, mais commençons simple.




async function getTemp() {

  try {

    const tokenRes = await fetch('https://aldesiotsuite-aldeswebapi.azurewebsites.net/oauth2/token/', {

      method: 'POST',

      body: new URLSearchParams({'grant_type': 'password', 'username': username, 'password': password})

    });

    if (!tokenRes.ok) throw new Error('Login failed');

    const tokenData = await tokenRes.json();

    

    // Lecture des produits

    const prodRes = await fetch('https://aldesiotsuite-aldeswebapi.azurewebsites.net/aldesoc/v5/users/me/products/', {

        headers: { 'Authorization': `Bearer ${tokenData.access_token}` }

    });

    const products = await prodRes.json();

    

    // On cherche ton thermostat dans la liste

    // On scanne l'objet "indicator" qui contient les thermostats T.One

    const myZone = products[0].indicator.thermostats.find(t => t.ThermostatId === aldesThermostatId);




    if (myZone) {

        console.log(`Lecture : Mesure=${myZone.CurrentTemperature}, Consigne=${myZone.TemperatureSet}`);

        

        // CRÉATION DES ÉTIQUETTES (TAGS)

        // Ces valeurs seront disponibles dans tes Flows

        await tag('Salon_Mesure', myZone.CurrentTemperature);

        await tag('Salon_Consigne', myZone.TemperatureSet);

        return true;

    }

  } catch (err) {

    console.error(err);

    return false;

  }

}

await getTemp();

Étape 3 : Création du Thermostat Virtuel

Pour piloter cela proprement depuis l’app Homey : (téléchargez en amout l’app Virtual devices sur le store)

  1. Appareils → +Virtual Devices.

  2. Choisissez Thermostat.

  3. Nommez-le “Thermostat Salon”.

  4. Cochez “Température cible” et “Température mesurée”.


Étape 4 : Les Flows (Le cœur du système)

Il nous faut 2 flows distincts pour gérer le cycle de vie correctement.

Flow 1 : Le Pilotage (Quand je change la température manuellement)

C’est ici que l’astuce du délai est cruciale. Si on notifie trop vite, on affiche l’ancienne valeur.

  • QUAND :

    • La température de consigne de “Thermostat Salon” a changé.
  • ALORS :

    1. Homeyscript : Exécuter Aldes_Set_Salon avec l’argument Tag: Température de consigne (du thermostat virtuel).

    2. Homeyscript : Exécuter Aldes_Update_Salon.

      • :warning: Ajouter un Délai sur cette carte : 5 secondes.

      • (Cela laisse le temps au Cloud Aldes de prendre en compte le changement).

    3. Notification : Envoyer une notification Push : “Chauffage réglé sur [Tag: Aldes_Salon_Consigne]°C”.

      • :warning: Ajouter un Délai sur cette carte : 6 secondes (ou plus si nécessaire).

Flow 2 : La Mesure / Synchronisation (Automatique)

Ce flow sert à mettre à jour le thermostat virtuel si quelqu’un change la température via l’application officielle Aldes ou le boîtier mural physique.

  • QUAND :

    • Toutes les 15 minutes (ou 5, ou 30 selon votre besoin).
  • ALORS :

    1. Homeyscript : Exécuter Aldes_Update_Salon.

    2. Thermostat Virtuel : Définir la température mesurée sur Tag: Aldes_Salon_Temp.

    3. Thermostat Virtuel : Définir la température de consigne sur Tag: Aldes_Salon_Consigne.


Résumé de la logique : Le script Set envoie l’ordre. Le script Update lit la réalité du terrain. Les délais dans le flow de pilotage permettent de s’assurer que le script Update lit bien la nouvelle valeur avant que la notification ne parte.

Bonne installation à tous !