Aller au contenu

Remplir des valeurs de Test

Parfois, on peut vouloir remplir des valeurs dans le passé pour avoir des données de Test (et avoir de jolis tableaux bien remplis).

Attention, cette fonctionnalité n'est pas très bien supportée par Home Assistant.

Néanmoins, nous vous proposons deux approches pour faire cela

Approche Manuelle

Approche Backfill automatique

Attention : vous pourrez générer des valeurs passées mais uniquement pour une entrée "basique" (nombre, texte, liste déroulante). Ces valeurs ne seront pas reflétées sur les entrées secondaires (capteurs et autres dérivés).

Commencez par créer vos entrées et capteurs.

Dans la librairie fournie en Java, nous avons préparé quelques méthodes pour faciliter le backfill.

La classe TimerUtils

TimerUtils.generateBackfillDateTimes() permet de générer une liste de timestamps dans le passé à intervalle réguliers.

Par exemple, si vous voulez générer un timestamp tous les jours depuis les 12 derniers mois, vous pouvez appeler :

var dateTimes = generateBackfillDateTimes(LocalDate.now().minusMonths(12), Duration.of(1, ChronoUnit.DAYS));

La classe DataUtils

DataUtils fournit un certain nombre de méthodes pour générer un ensemble de valeurs de test pour vos backfills.

Vous pouvez utiliser notamment les méthodes suivantes :

// Générer une quantité "n" de valeurs aléatoires entre min et max
DataUtils.generateRandomValuesBetween(double min, double max, int n);
// Générer une quantité "n" de valeurs entre min et max, qui vont décroitre linéairement de max à min
DataUtils.generateLinearDecrementalValuesBetween(double min, double max, int n);
// Générer une quantité "n" de valeurs entre min et max, qui vont croitre progressivement et aléatoirement de min à max
DataUtils.generateIncrementalValuesBetween(double min, double max, int n);

Un exemple tout prêt

Voici un exemple d'utilisation qui génère des données pour une entrée nombre.

Les données sont générées tous les jours depuis un an.

import java.time.LocalDateTime;
import java.time.OffsetDateTime;

void backfill() {
    String entityId = "input_number.test_weight_watcher";
    // Make sure entity exists
    this.client.assertExists(entityId);
    // Generate regular datetimes since reference date (one month ago)
    List<OffsetDateTime> dateTimes = generateBackfillDateTimes(LocalDate.now().minusMonths(1), Duration.of(1, ChronoUnit.DAYS));
    // Generate random values for backfill
    List<Double> values = generateDecrementalValuesBetween(65, 80, dateTimes.size());
    // Update entity values
    for (int i = 0; i < dateTimes.size(); i++) {
        this.client.updateEntityAt(entityId, values.get(i).toString(), dateTimes.get(i));
    }
}