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));
}
}