Communiquer avec l'application
Avant de pouvoir communiquer avec l'application, vous devez déjà avoir créé vos entrées et vos capteurs dans Home Assistant.
Configurer le Client
Voici le code qui permet d'instancier un Client qui communique avec Home Assistant.
Dans l'exemple, les valeurs de configuration sont récupéres depuis le fichier .env
:
Dotenv dotenv = Dotenv.configure().load();
String homeAssistantBaseUrl = dotenv.get("HOME_ASSISTANT_BASE_URL");
String homeAssistantBearerToken = dotenv.get("HOME_ASSISTANT_BEARER_TOKEN");
HomeAssistantClient client = StandardHomeAssistantClient.create(homeAssistantBaseUrl, homeAssistantBearerToken);
Changer l'état d'une entrée Home Assistant
Le client vous permet de facilement changer l'état de toute entité que vous avez créée.
Pour cela, rien de plus simple, il suffit de trouver l'identifiant unique de l'Entité.
On le trouve dans Paramètres -> Appareils et Services -> Entrées
Dans le tableau des entrées, il y a une colonne ID de l'entité
Une fois l'Identifiant de l'entité trouvé, vous pouvez simplement adapter le code suivant à vos besoins :
String entityId = "input_number.test_counter";
// Make sure entity exists
this.client.assertExists(entityId);
// Change value
this.client.updateEntityValue(entityId, "2.0");
Écouter un changement d'état
Le client vous permet aussi d'être à l'écoute de changements d'état dans Home Assistant.
Par exemple : si vous souhaitez créer une action dans votre application dès qu'une valeur a été changée dans Home Assistant.
Pour cela, allez retrouver l'identifiant de l'entité dans Home Assistant (cf étape précédente), et adaptez le code suivant à votre usage :
String entityId = "input_text.test_text";
// Make sure entity exists
this.client.assertExists(entityId);
// Watch entity changes and print when entity changes
// This method is called EVERY time the value is changed.
this.client.watchEntityChanges(entityId).subscribe((e) -> {
System.out.println("Entity " + entityId + " changed");
System.out.println("New value is: " + e);
});
// Don't forget to call this method, otherwise the program will exit.
// Here, the program will wait 60 seconds before exiting.
TimerUtils.sleepMillis(60_000);