Utiliser l'intégration Voice over IP avec un serveur local Asterisk

Bonjour,

L’intégration VoIP ( Voice over IP - Home Assistant ) est à l’origine faite pour l’utilisation de téléphones RTC branchés à des boîtiers adaptateur VoIP. Les tutoriels que j’ai trouvé de mon côté nécessitent donc l’acquisition de matériel comme les Grandstream HT801.

Pour ceux, qui comme moi, ont déjà un PBX Asterisk installé localement, je voulais partager les étapes qu’il m’a fallu réaliser pour utiliser directement les Softphones (Applications SIP) ou les téléphones SIP déjà déployés chez moi.

Prise en charge du codec Opus

Si votre serveur Asterisk prend déjà en charge ce codec, vous pouvez passer ce chapitre.
Vous pouvez vérifier si le module est chargé dans le l’interface en ligne de commande d’Asterisk (CLI) en exécutant la commande suivante:
module show like opus
Si le CLI vous retourne le module codec_opus.so en statut Running, vous n’avez rien à faire.
exemple:

Module                         Description                              Use Count  Status      Support Level
codec_opus.so                  OPUS Coder/Decoder                       0          Running          extended
res_format_attr_opus.so        Opus Format Attribute Module             1          Running              core
2 modules loaded

A l’installation de Asterisk depuis le code source, après avoir installé toutes les dépendances et lancé ./configure l’option « codec_opus » de la section « Codec Translators » du menuselect


Cette option permet apparemment de faire communiquer des appareils qui ne gère pas le codec Opus avec d’autres qui le gèrent.
Pour l’installation du codec en soi, j’ai récupéré le module pré-compilé sur le site suivant:

Allez dans le dossier de la version d’Asterisk qui vous intéresse, puis le dossier d’architecture cible (x86-64/) et copiez le lien vers le fichier .tar.gz qui vous intéresse.

Sur le serveur Astérisk, lancer les commandes suivantes:

# Se positionner dans le dossier /usr/src
cd /usrc/src
# Télécharger la version du codec qui correspond à celle de votre serveur Asterisk en collant le lien précédemment copié
# Pour ma part ça a été:
wget https://downloads.digium.com/pub/telephony/codec_opus/asterisk-22.0/x86-64/codec_opus-22.0-current-x86_64.tar.gz
# Décompresser l'archive:
tar xvzf codec_opus-22.0-current-x86_64.tar.gz
cd codec_opus-22.0_1.3.0-x86_64/
# Copier le fichier codec_opus.so vers /usr/lib/asterisk/modules/
cp codec_opus.so /usr/lib/asterisk/modules/
# Copier le fichier codec_opus_config-en_US.xml dans /var/lib/asterisk/documentation/thirdparty/
cp codec_opus_config-en_US.xml /var/lib/asterisk/documentation/thirdparty/

Ensuite, éditer avec nano par exemple le fichier /etc/asterisk/codec.conf pour y ajouter à la fin la section suivante:


[opus]
type=opus
max_playback_rate=8000
cbr=yes

Enfin redémarrez Asterisk en exécutant service asterisk restart
Vous pouvez relancer la commande module show like opus dans le CLI d’Asterisk pour vérifier le bon chargement du module codec_opus.so.

Création d’une extension pour Home Assistant

Éditez le fichier /etc/asterisk/pjsip.conf et ajouez une extension pour Home Assistant. A adapter selon vos goûts bien sûr. L’important est que cette extension autorise le codec opus. Plus simple est que les autres extensions l’autorisent également et que le contexte utilisé soit le même que celui des autres postes (internal dans cet exemple).

;=== EXTENSION pour HOME ASSISTANT ===

[555]
type=endpoint
context=internal
allow=!all,opus
callerid="Home Assistant"
auth=555
aors=555

[555]
type=auth
auth_type=userpass
username=ha
passord=

[555]
type=aor
max_contacts=1

Modification du plan de numérotation (DialPlan)

Editez le fichier /etc/asterisk/extensions.conf pour ajouter dans le contexte des autres extensions celle de Home Assistant:

exten => 555,1,Dial(PJSIP/555/sip:ha@<IP_ADDRESS>:5060)
 same => n,Hangup()

<IP_ADDRESSE> doit être remplacé par l’adresse ip de votre serveur Home Assistant.

Vous pouvez recharger le module pjsip et le dialplan, ou simplement relancer Asterisk pour que les modifications soient prisent en charge.

service asterisk restart`

Configuration de l’intégration Voice over IP dans Home Assistant

Si ce n’est pas déjà fait, installez l’intégration Voice over IP:

Dans la configuration de l’intégration, entrez un nom d’utilisateur. Je l’ai fait coïncider avec celui entré dans le DialPlan, mais honnêtement, je ne suis pas sûr que ça ait de l’importance.
Laissez le port 5060 par défaut, à moins que celui-ci ne soit déjà utilisé par un autre service sur votre serveur Home Assistant ; Auquel cas, il vous faudra également adapter l’extension dans le fichier extensions.conf du serveur Asterisk.

Depuis vos téléphones IP, appelez l’extension que vous avez créé pour Home Assistant (555 dans mon exemple).
Un message vous répondra en anglais la première fois qu’il vous faut configurer l’extension dans Home Assistant.
Retournez donc dans l’intégration Voice over IP.
Le téléphone depuis lequel vous avez appelé doit maintenant apparaître dans la liste des appareils (Salon-SIP dans l’exemple).

Cliquez sur le crayon pour l’éditer et dans la section Configuration, activez l’option Autoriser les appels.

Voilà, c’est fini !

Vous devriez normalement pouvoir maintenant appeler le numéro dédié à Home Assistant depuis votre téléphone SIP, et l’assistant choisi devrait répondre pour exécuter vos commandes ou simplement répondre à vos questions (en fonction de la configuration de votre Assistant).

J’espère que ce post pourra servir. Pour ma part, je n’avais pas trouvé d’information complète sur ce sujet, et encore moins en français.
Si des erreurs ont été commises vous êtes les bienvenus pour les remonter et/ou les corriger.

Salut

Merci pour le partage et pour info il existe une intégration Asterisk qui marche super bien: GitHub - TECH7Fox/asterisk-hass-integration: Asterisk integration for Home Assistant
Je m’en sers pour avoir la visu de l’état de toutes les extensions, et aussi pour pouvoir générer des appels depuis HA (Callbell entre autre).

Vincèn