Faire parler notre domotique

Introduction

Dans cet article, nous allons explorer comment créer une expérience utilisateur impressionnante en utilisant des notifications vocales pour signaler des événements spécifiques dans une pièce où vous vous trouvez. Grâce à cette approche, vous pourrez bénéficier d’un effet “waou” qui captivera l’attention et améliorera l’interaction avec votre système domotique.

Architecture

Pour résumer cela nous donne pour des appels de type GET comme pour Domoticz :

Ou en webhook de type POST comme pour Grafana :

Pour se faire nous allons exploiter le script généreusement fourni par Thorsten Gehrigh, qui peut être trouvé sur son dépôt GitHub à l’adresse suivante :

https://github.com/thorsten-gehrig/alexa-remote-control

Le script alexa-remote-control.sh permet d’envoyer des commandes text-to-speech (TTS) à vos appareils Alexa. En utilisant une simple commande, comme celle présentée ci-dessous, vous pouvez faire parler votre dispositif Alexa pour émettre des notifications vocales personnalisées.

./alexa-remote-control.sh -d "Cuisine" -e speak:"Attention, Innondation detecté dans la cuisine"

Dans cet exemple, la commande indique à l’appareil Alexa de la cuisine de dire “Attention, Innondation détectée dans la cuisine”.

Pour utiliser ce script et cette commande, suivez les étapes ci-dessous :

Téléchargez le script depuis le dépôt GitHub de Thorsten Gehrigh : https://github.com/thorsten-gehrig/alexa-remote-control Installez les dépendances requises pour le script.

Vous aurez besoin de jq, curl, et od. Sur un système basé sur Debian (comme Ubuntu), vous pouvez installer ces dépendances avec la commande suivante :

sudo apt-get install jq curl od
  1. Rendez le script exécutable en utilisant la commande chmod :
chmod +x alexa-remote-control.sh
  1. Exécutez le script pour vous connecter à votre compte Amazon et récupérer les informations d’identification nécessaires :
./alexa-remote-control.sh -a
  1. Une fois que vous êtes connecté et que le script a récupéré les informations d’identification nécessaires, vous pouvez utiliser la commande TTS comme indiqué précédemment.

Notez que vous pouvez remplacer “Cuisine” par le nom de n’importe quel autre appareil Alexa que vous possédez. De plus, vous pouvez personnaliser le message vocal en modifiant la partie “Attention, Innondation détectée dans la cuisine” de la commande.

Interface

Faire parler Alexa en CLI, c’est bien, allez-vous me dire. Mais comment l’intégrer avec nos différents composants ?

C’est la que l’on fait intervenir notre brique qui est ni plus ni moins un petit bout de code PHP qui nous sert d’api :


<?php

$locale = 'fr_FR.utf-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);

header("X-Robots-Tag: noindex, nofollow", true);

$token = (string)$_GET['token'];

$data = array();
if (!$token || $token != 'yourSecureToken') {
    $data = array(
        'error' => "Not authorised",
        'error_code' => 403,
        'error_description' => "Not authorised",
        'resource' => null
    );
    echo json_encode($data);
    header('HTTP/1.0 403 Forbidden');
    exit;
}

$message = urldecode((string)$_GET['message']);
$location = (string)$_GET['location'];
$number = (string)$_GET['number'];
$number_array = explode('-', $number);

if (!$message || !$number_array) {
    $data = array(
        'error' => "Missing data",
        'error_code' => 403,
        'error_description' => "Missing data",
        'resource' => null
    );
    echo json_encode($data);
    header('HTTP/1.0 403 Forbidden');
    exit;
}

foreach ($number_array as $number) {
exec('/scripts/alexa-remote-control.sh -d "'.$location.'" -e speak:"'.$message.'"');
}

Une fois installé nous pouvons faire parler nos devices Alexa en HTTP :

curl "http://myipgw.ravindra-job.com/alexa.php?message=Innondation%20dans%20la%20cuisine&location=Salledebain&token=yourSecureToken%27"

On peut construire cette infra sous un conteneur :

version: "3"
services:
  php:
    #image: php:7.4-apache
    #build: .
    image: registry.ravindra-job.com:5000/apigw:v0.02
    container_name: php
    volumes:
      - ./apache2/sites-enabled/:/etc/apache2/sites-available
      - ./html/:/var/www/html/
      - ./scripts/:/scripts/
    ports:
      - 8081:80
    restart: unless-stopped

Tous les éléments nécessaire sont ici : https://github.com/ravindrajob/InfraAtHome/tree/main/api-gw

Integration Domoticz

Maintenant que tout est configuré nous pouvons ajouter ce bloc de code à nos scripts .lua :

commandArray['OpenURL']='http://myipgw.ravindra-job.com/alexa.php?message=Innondation%20dans%20la%20cuisine&location=Cuisine&token=yourSecureToken'

Integration Home assistant

On ajoute dans notre configuration.yaml

shell_command:
  porteverssoussol_alexa_desk: '/usr/bin/curl "http://myipgw.ravindra-job.com/alexa.php?message=ouverture%20porte%20sous%20sol&location=desk&token=yourSecureToken"'

puis dans notre scripts automation.yaml on l’appelle comme suit :

- id: door_entre_escalier_soussol
  alias: door_entre_escalier_soussol
  trigger:
    platform: state
    entity_id:
    - binary_sensor.door_escalier_soussol_contact
    from: 'off'
    to: 'on'
  action:
  - service: shell_command.porteverssoussol_alexa_desk

Integration Grafana

Pour Grafana il faut adapter notre code PHP pour qu’il soit en webhook :

<?php
$data = json_decode(file_get_contents('php://input'), true);
header('content-type: application/json');
$location = "Salon";
exec('/scripts/alexa-remote-control.sh -d "'.$location.'" -e speak:"'.$data["message"].'"');
?>

Il nous reste plus qu’a configuré l’alerting dans Grafana et le tour est joué :

PS: Pour information j’ai abandonné Domoticz au profil de home assistant, cet article ne sera donc plus mise à jour Si vous voulez plus d’information sur l’infra vous pouvez voir mon repo à ce sujet :

https://github.com/ravindrajob/InfraAtHome