Aller au contenu principal

Intégration domotique Semaphore UI, gratuite et open source

Intégration Semaphore UI pour Gladys Assistant

Lancez vos modèles Semaphore UI (Ansible…) depuis vos scènes Gladys et suivez leur résultat.

Semaphore UI est une interface web libre pour lancer des playbooks Ansible, du code Terraform/OpenTofu et des scripts shell ou Python : chaque « modèle » (template) est un travail qu'on lance d'un clic et dont on suit le résultat. Cette intégration amène dans Gladys les modèles que vous autorisez : chacun devient un appareil avec le statut de sa dernière tâche, une scène peut lancer un modèle (et attendre sa fin) ou arrêter sa tâche en cours, des scènes peuvent réagir quand une tâche réussit ou échoue, et un widget du tableau de bord affiche leur dernier statut avec un bouton Lancer.

Testée contre un vrai Semaphore UI 2.19 (Docker, SQLite, playbooks Ansible) ; pas encore contre une vraie instance Gladys : vos retours sont les bienvenus sur les issues.

Ce qu'il vous faut​

  • Gladys Assistant 5.1.0 ou plus récent.
  • Semaphore UI 2.x, joignable depuis la machine de Gladys.
  • Un jeton d'API d'un utilisateur de Semaphore qui peut lancer les modèles (rôle « Task Runner » ou plus dans son projet).

Lancer un modèle exécute du code sur vos machines. C'est pourquoi rien n'est lançable depuis Gladys tant que vous n'avez pas saisi son numéro dans la liste des modèles autorisés, et pourquoi l'intégration ne lit jamais la sortie des tâches (les journaux d'Ansible peuvent contenir des secrets) : seulement leur statut et leur durée.

À chaque actualisation (une minute par défaut), l'intégration lit la liste des projets, puis les modèles des projets qui contiennent un modèle autorisé ; toutes les 5 secondes pendant qu'une tâche d'un modèle autorisé tourne. Semaphore ne limite pas le nombre de requêtes à son API.

Mise en route​

1. Créer un jeton d'API​

Dans Semaphore, ouvrez le menu utilisateur (en bas à gauche) → API tokens et créez un jeton. Sur une version sans cet écran, l'API en crée un : POST /api/user/tokens une fois connecté. Le jeton agit avec les droits de son utilisateur : un utilisateur dédié, membre des seuls projets concernés, limite ce que Gladys peut faire.

2. Configurer l'intégration​

Dans Gladys, Intégrations → Semaphore UI → Configuration :

  • Adresse de Semaphore : l'adresse avec laquelle vous ouvrez Semaphore, ex. http://192.168.1.2:3000 (le port 3000 est ajouté à une adresse IP seule).
  • Jeton d'API : le jeton de l'étape 1.
  • Langue des noms : français par défaut ; elle fixe les noms des fonctionnalités à l'ajout d'un appareil, les statuts et les résultats de scène.

Enregistrez, puis cliquez sur Tester la connexion : la liste de tous les modèles que voit le jeton s'affiche, avec leur numéro, leur projet et leur nom, ex. #3 Home lab : Update servers.

3. Autoriser des modèles​

Saisissez dans Modèles autorisés (numéros) les numéros des modèles que Gladys peut suivre et lancer, séparés par des virgules : 3, 7. Le numéro figure aussi dans l'adresse d'un modèle dans Semaphore (…/project/1/templates/3). Vide : rien n'est suivi, rien n'est lançable.

4. Ajouter les appareils​

Dans l'onglet Découverte, ajoutez les modèles voulus comme appareils. Les déclencheurs, les actions et le widget fonctionnent pour tout modèle autorisé ; les appareils apportent les états et l'historique.

Les appareils​

Un appareil par modèle autorisé, à son nom :

FonctionnalitéSignification
Dernière tâchestatut de la dernière tâche : Réussi, En échec, En cours, Arrêté, En attente…
Dernière tâche réussie1 quand la dernière tâche terminée a réussi, 0 si elle a échoué ou été arrêtée
En cours1 pendant qu'une tâche du modèle tourne
Dernier lancementdébut de la dernière tâche (jour/mois heures:minutes, fuseau de Gladys)
Durée de la dernière tâchedurée de la dernière tâche terminée, en secondes

L'appareil n'a aucune commande : lancer Ansible n'est pas un interrupteur qu'un assistant vocal ou un appui malencontreux devrait atteindre. Un modèle se lance depuis une scène ou depuis le widget, qui demande une confirmation.

Tableau de bord​

Le widget Modèles Semaphore liste les modèles autorisés (ou ceux choisis dans ses réglages), ceux en échec d'abord, puis ceux en cours : dernier statut, heure de début, durée. Sous la liste, un bouton par modèle (les trois premiers) : Lancer, ou Arrêter pendant qu'une tâche tourne. Gladys demande une confirmation avant de l'envoyer. Actualiser relit Semaphore.

Scènes​

Déclencheurs​

  • Une tâche Semaphore réussit : une tâche d'un modèle autorisé se termine avec succès.
  • Une tâche Semaphore échoue : une tâche d'un modèle autorisé se termine en erreur.

Les deux peuvent être limités à certains modèles, et donnent le nom du modèle, le projet, le numéro de la tâche et la durée en secondes. Une tâche arrêtée n'est ni l'un ni l'autre. Les tâches lancées depuis Semaphore lui-même, une planification ou un autre outil comptent aussi. La première lecture après l'installation n'annonce rien du passé ; une tâche terminée pendant un redémarrage de Gladys ou de l'intégration est annoncée une fois.

Actions​

  • Lancer un modèle Semaphore : lance un modèle autorisé. Variables supplémentaires (JSON) est facultatif : un objet JSON transmis à la tâche, ex. {"target": "web1"} (les valeurs de la scène peuvent y être insérées). Avec Attendre la fin (90 s au plus), la scène attend la tâche et les actions suivantes reçoivent son résultat. Sorties : numéro de la tâche, terminée, réussie, statut, durée (s).
  • Arrêter une tâche Semaphore : arrête la tâche en cours d'un modèle autorisé. Sorties : une tâche a été arrêtée (oui/non), numéro de la tâche.

Les deux refusent un modèle absent de la liste des modèles autorisés, même si son appareil existe encore dans Gladys.

Idées de scènes​

  • Chaque dimanche à 3 h, lancer « Update servers » ; quand Une tâche Semaphore échoue, envoyer un message Telegram : « {{triggerEvent.data.template}} a échoué après {{triggerEvent.data.duration}} s ».
  • En quittant la maison, lancer « Nightly backup » avec Attendre la fin, puis vous prévenir seulement si « Réussie » est faux.
  • Un bouton sur la tablette murale : le widget, avec « Redémarrer le serveur multimédia » autorisé.

Dépannage​

  • Jeton d'API refusé : le jeton a été supprimé ou mal recopié ; créez-en un nouveau.
  • Refusé par Semaphore : cet utilisateur n'a pas le droit de lancer des tâches dans le projet : donnez à l'utilisateur du jeton le rôle « Task Runner » (ou plus) dans le projet.
  • Autorisés mais introuvables : le numéro est faux, le modèle a été supprimé, ou l'utilisateur du jeton n'est pas membre de son projet. Tester la connexion liste ce que voit le jeton.
  • Aucune API Semaphore à cette adresse : vérifiez l'adresse et le port ; derrière un proxy inverse, incluez son chemin.
  • L'adresse redirige : saisissez l'adresse en https://.
  • Une tâche n'apparaît pas tout de suite : l'intégration lit Semaphore chaque minute (réglable), toutes les 5 secondes pendant qu'une tâche tourne.

Limites​

  • Seule la dernière tâche de chaque modèle est lue : si deux tâches du même modèle se terminent entre deux lectures, seule la dernière déclenche une scène.
  • La sortie des tâches n'est jamais lue ni affichée, par choix.
  • « Attendre la fin » attend 90 s au plus (la limite d'une action de scène dans Gladys) ; une tâche plus longue continue, et les déclencheurs signalent sa fin.
  • Les tâches Terraform en attente de confirmation affichent « À confirmer » ; la confirmation se fait dans Semaphore.
  • Développée et testée contre Semaphore UI 2.19.17 ; les versions 2.x plus anciennes devraient fonctionner (même API), sans test.

Paramètres de configuration​

Voici les paramètres demandés par Semaphore UI dans son écran de configuration dans Gladys.

ParamètreTypeObligatoireDescription
Votre SemaphoresectionNonDans Semaphore, ouvrez le menu utilisateur → API tokens et créez un jeton. Collez-le ci-dessous avec l'adresse de Semaphore, cliquez sur Tester la connexion pour lister les modèles avec leur numéro, puis saisissez les numéros des modèles que Gladys peut lancer. Rien n'est lançable avant.
Adresse de SemaphorestringNonL'adresse avec laquelle vous ouvrez Semaphore. Le port 3000 est ajouté à une adresse IP seule.
Jeton d'APIsecretNonCréé dans le menu utilisateur → API tokens. Il agit avec les droits de son utilisateur.
Modèles autorisés (numéros)stringNonNuméros des modèles que Gladys peut suivre et lancer, séparés par des virgules. Vide : aucun. Tester la connexion les liste.
OptionssectionNon
Intervalle d'actualisationselectNonLa fréquence de lecture de Semaphore ; toutes les 5 secondes pendant qu'une tâche tourne.
Langue des nomsselectNonLangue des noms des fonctionnalités (fixés à l'ajout d'un appareil), des statuts et des résultats de scène.

Comment installer Semaphore UI dans Gladys​

  1. Dans Gladys, ouvrez Intégrations : Semaphore UI apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
  2. Cliquez sur Installer. Gladys télécharge l'image Docker (ghcr.io/guim31/gladys-semaphore:1.0.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration).
  3. Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
  4. Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/guim31/gladys-semaphore.

Semaphore UI nécessite Gladys >=5.1.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.

Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.

À propos des intégrations externes​

Semaphore UI est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par guim31, et non par l'équipe cœur de Gladys.

Inscrivez-vous à la newsletter Gladys Assistant

Quelques emails par mois sur les nouveautés et l'actualité du projet. Envoyés par Pierre-Gilles Leymarie, le fondateur du projet. Désinscription possible à tout moment 🙂