Aller au contenu principal
ntfybridge

ntfybridge

Communication bidirectionnelle entre Jeedom et ntfy. Recevez des alertes riches et pilotez votre domotique par message depuis votre téléphone.

Jeedom 4.4+betaos 11+php 7.4/8.xNode.js☕ Soutenir le développement

📡 Manuel d'utilisation — Plugin ntfybridge

Le plugin ntfybridge connecte Jeedom à ntfy, une application de notifications open-source disponible sur iOS, Android et Web.

La communication est bidirectionnelle :

  • Jeedom → Téléphone : alertes, rapports, photos, fichiers
  • Téléphone → Jeedom : questions, commandes, confirmations

✨ Ce que vous pouvez faire

Jeedom vous contacte, vous informe, vous alerte.

  • 🔔 Alerte si une fenêtre est ouverte sous la pluie
  • 🌡️ Notification si la température du garage descend sous 5 °C
  • 📸 Photo de caméra quand le portail s'ouvre
  • 🚨 Alerte urgente avec icône et son personnalisé
  • 📋 Rapport quotidien de l'état de la maison
  • ⏰ Message différé — "Rappel dans 30 minutes"
  • 🗂️ Profils d'envoi nommés : urgent, discret, rapport

🔀 Modes de configuration

Configuration recommandée

Mode embarqué + sous-domaine HTTPS — installation all-in-one, données chez vous, toutes les fonctionnalités (push iOS natif, boutons de confirmation, icônes, fichiers joints).

ntfy est inclus dans le plugin et exposé via reverse proxy sur un sous-domaine.

Atouts :

  • All-in-one, rien à installer séparément
  • Toutes les fonctionnalités : push iOS natif, boutons Oui/Non, icônes, fichiers
  • Données chez vous, contrôle total des utilisateurs ntfy
  • Assistant reverse proxy intégré (5 étapes guidées)

Contraintes :

  • Nécessite un nom de domaine (ex: ntfy.mondomaine.fr)
  • Nécessite un reverse proxy (Apache, Nginx, NPM, Traefik, Cloudflare…) — voir configuration →

📦 Installation

1️⃣ Installer le plugin

Plugins → Gestion des plugins → Market → ntfybridge → Installer

Activer le plugin après installation.

info

Node.js (≥ 18) et le binaire ntfy sont installés automatiquement. Aucune intervention manuelle.


2️⃣ Créer un équipement

  1. Plugins → ntfybridge → Ajouter
  2. Nommer, activer
  3. Configurer les topics :
    • Topic d'écoute : Jeedom reçoit les messages sur ce topic (ex: maison_cmd)
    • Topic de réponse : Jeedom envoie ses réponses sur ce topic (ex: maison_reply)
  4. Sauvegarder — les commandes sont créées automatiquement
astuce

Le topic est l'équivalent d'un mot de passe. Choisir un nom difficile à deviner.

S'abonner dans l'app ntfy en copiant l'URL affichée dans la section Abonnement de l'équipement.


🗂️ Configuration de l'équipement

Chaque équipement ntfybridge dispose de quatre onglets.

⚙️ Onglet Équipement

📡 Topics

ChampRôle
Topic d'écouteTopic ntfy sur lequel Jeedom reçoit les messages entrants (SSE). Ex: maison_cmd
Topic de réponseTopic ntfy sur lequel Jeedom envoie ses réponses automatiques et confirmations. Ex: maison_reply
astuce

Les deux topics peuvent être identiques si vous n'avez qu'un seul topic pour tout. Séparer les topics permet cependant de s'abonner uniquement aux réponses sans recevoir ses propres commandes en écho.

🔧 Valeurs par défaut

Ces valeurs s'appliquent à chaque envoi si aucune surcharge n'est définie par commande cache ou paramètre inline.

ParamètreDescription
PrioritéNiveau de notification : 1=min (silencieux) · 2=low · 3=défaut · 4=high · 5=urgent (son fort)
TagsEmojis affichés dans la notification, séparés par virgule (ex: loudspeaker,bell)
MarkdownActive le rendu gras, italique, listes dans le corps du message
IcôneURL d'une image affichée comme icône (Android uniquement)
DélaiEnvoi différé : 30m, 9am, 2026-01-01T09:00
Cache ntfyMise en cache côté serveur ntfy (yes/no). Vide = comportement serveur
FirebaseActivation du push Firebase (yes/no). Vide = comportement serveur

🔒 Sécurité

ParamètreDescription
Utilisateurs autorisésListe des utilisateurs ntfy autorisés à envoyer des commandes, séparés par virgule. Vide = tous
Mots interditsMots dont la présence dans le message bloque tout traitement (ex: delete,rm,sudo)
Timeout confirmationDélai d'expiration d'une demande de confirmation Oui/Non, en secondes (défaut : 60 s)

🔕 Mode silencieux

OptionDescription
Mode silencieux globalBloque tous les envois et réponses automatiques
Désactiver les envois sortantsBloque définitivement la commande send_message
Désactiver les réponses automatiquesIgnore les règles Réponses et Actions pour les messages entrants
En mode silencieuxComportement : bloquer complètement ou passer en priorité 1 (min, silencieux)
Plages horairesPériodes de silence automatique (ex: 22:00 → 08:00)
info

Désactiver les envois sortants est utile par exemple pour un équipement dédié uniquement à la réception de commandes, sans jamais envoyer de notification sur le topic d'écoute.


💬 Onglet Réponses

Définit ce que Jeedom répond quand il reçoit un message correspondant à des mots-clés.

📋 Colonnes de la règle

ChampDescription
NomLibellé de la règle (affiché dans le select Déclencher réponse)
Mots-clésTermes déclencheurs, séparés par virgule. Ex: température salon, temp salon
ModeContient : le mot-clé peut être dans un mot plus long · Mot exact : doit être un mot séparé (évite les faux positifs)
RéponseTexte envoyé, avec références {#id_commande#} pour insérer des valeurs en temps réel
TitreTitre de la notification ntfy (optionnel)
PrioritéPriorité de la réponse (1–5)
TagsEmojis ntfy pour la réponse
Image URLURL d'une image attachée à la réponse

🔗 Références de commandes dans la réponse

Cliquer sur + pour ouvrir le sélecteur de commandes Jeedom et insérer {#id#} à la position du curseur.

Exemple de template multi-commandes
Salon : {#364#} °C — Humidité : {#365#} % — CO₂ : {#366#} ppm

Plusieurs commandes peuvent être combinées dans le même template. Les valeurs sont lues en parallèle au moment de l'envoi.

info

Chaque règle peut envoyer la réponse sur un topic différent du topic de réponse par défaut de l'équipement (champ Topic de réponse optionnel par règle).


⚡ Onglet Actions

Définit ce que Jeedom exécute quand il reçoit un message correspondant à des mots-clés.

📋 Champs de la règle

ChampDescription
NomLibellé de la règle (affiché dans le select Déclencher action)
Mots-clésTermes déclencheurs, séparés par virgule
ModeContient ou Mot exact (voir Onglet Réponses)
ActionCommande ou scénario Jeedom à exécuter (sélecteur standard Jeedom)
ConfirmationSi activé : envoie une notification avec boutons Oui ✓ / Non ✗ avant d'exécuter
Texte de confirmationMessage affiché avec les boutons (ex: Ouvrir le portail ?)
Texte succèsMessage envoyé après exécution réussie
Texte annulationMessage envoyé si l'utilisateur clique Non
Priorité / TagsParamètres ntfy de la notification de confirmation

✅ Confirmation Oui / Non

Quand la confirmation est activée, Jeedom génère un token sécurisé (128 bits, usage unique) et envoie une notification ntfy avec deux boutons HTTP.

  • Oui ✓ → Jeedom exécute l'action et envoie le texte succès
  • Non ✗ → Jeedom envoie le texte annulation et supprime le token

Le token expire automatiquement après le timeout configuré (onglet Équipement → Sécurité).

attention

Les boutons ntfy s'affichent dans le détail du message (tap sur la notification), pas en bandeau sur l'écran verrouillé. Les boutons nécessitent que l'URL externe Jeedom soit accessible depuis Internet.

Désactiver les notifications sur le topic d'action

Si vous ne souhaitez pas recevoir les messages de confirmation/succès/annulation sur le topic de réponse, laisser les champs Texte succès et Texte annulation vides, et désactiver la confirmation. Seule l'exécution de l'action aura lieu, sans retour ntfy.


🎛️ Onglet Commandes

Les commandes sont créées automatiquement à la sauvegarde de l'équipement. Aucune action manuelle requise.

📤 Commandes d'envoi

CommandeTypeRôle
Envoyer messageAction / messageDéclenche l'envoi réel. Titre + corps.
PrioritéAction / slider (1–5)Définit la priorité du prochain envoi (stocké en cache)
TagsAction / stringDéfinit les tags du prochain envoi
URLAction / stringDéfinit l'URL de clic du prochain envoi
ImageAction / stringDéfinit l'URL d'image attachée
FichierAction / stringChemin d'un fichier local à envoyer en pièce jointe (PUT binaire)
TopicAction / stringSurcharge ponctuelle du topic d'envoi
MarkdownAction / slider (0/1)Active ou désactive le rendu Markdown
IcôneAction / stringURL d'icône pour la notification
DélaiAction / stringEnvoi différé (30m, 9am…)
Cache ntfyAction / stringSurcharge du cache ntfy (yes/no)
FirebaseAction / stringSurcharge Firebase (yes/no)

🔁 Commandes de déclenchement

CommandeTypeRôle
Déclencher réponseAction / selectExécute une règle Réponse depuis un scénario Jeedom
Déclencher actionAction / selectExécute une règle Action depuis un scénario Jeedom
Ordre d'exécution dans un scénario

Les commandes de cache (Priorité, Tags, Icône…) doivent être appelées avant Envoyer message dans le scénario. La commande Envoyer message lit les caches, envoie la notification, puis réinitialise tous les caches.

Exemple de scénario Jeedom
Bloc action :
1. [Maison][ntfybridge] Priorité → 5
2. [Maison][ntfybridge] Tags → warning,fire
3. [Maison][ntfybridge] Envoyer message
Titre : Alarme
Message : Mouvement détecté zone A

📤 Envoyer des notifications

La commande send_message

Dans un scénario Jeedom :

Action → Message → [équipement ntfybridge] Envoyer message
Titre : Alarme
Message : Mouvement détecté zone A

⚙️ Options d'envoi

Appeler les commandes de cache avant send_message, ou utiliser les paramètres inline directement dans le message :

OptionCommande cacheInlineValeurs
Prioritésend_priority (1–5)[priority=5]1=min · 2=low · 3=défaut · 4=high · 5=urgent
Tagssend_tags[tags=warning,bell]emojis ntfy séparés par virgule
Icônesend_icon[icon=https://...]URL image (Android uniquement)
Markdownsend_markdown (0/1)[md=1]gras, italique, listes
Délaisend_delay[delay=30m]30m, 9am, 2026-01-01T09:00
Fichiersend_file[file=/chemin]chemin absolu sur le serveur
Topicsend_topic[topic=alertes]surcharge ponctuelle
URL clicsend_url[url=https://...]URL ouverte au tap

Exemple complet avec inline :

[priority=5][tags=warning,fire][title=Alerte] Mouvement détecté zone A
Compatibilité plateformes
FonctionnalitéAndroidiOSWeb
Icônes personnalisées
Markdown⚠️ partiel
Boutons d'action
Fichiers joints
Push natif sans HTTPS publicFirebase

🗂️ Profils d'envoi

Groupez vos paramètres récurrents en profils nommés. Ouvrir depuis Plugins → ntfybridge → Profils.

📊 Niveaux de priorité

NiveauValeurComportement
min1Silencieux, sans son ni vibration — rapports passifs
low2Discret — bannière silencieuse
default3Comportement standard de l'appareil
high4Son + vibration, même en mode ne pas déranger
urgent5Son fort + vibration + contourne le mode silencieux

🏷️ Tags courants

Les tags correspondent aux noms d'emojis ntfy, séparés par virgule.

TagEmojiUsage
warning⚠️Alerte générale
rotating_light🚨Urgence, alarme
fire🔥Incendie, température critique
bell🔔Notification, rappel
information_sourceℹ️Information, rapport
white_check_markSuccès, confirmation
xErreur, échec
house🏠Domotique générale
thermometer🌡️Température
lock🔒Sécurité, alarme
droplet💧Eau, pluie, humidité
electric_plug🔌Énergie, coupure
camera📷Caméra, détection
zzz💤Mode nuit, silence

➕ Créer un profil

ChampExemple
Nomalerte
Priorité5
Tagswarning,rotating_light
Icônehttps://...
Markdown

🚀 Utiliser un profil

[profile=alerte] Intrusion détectée
[profile=info] Rapport journalier prêt
[profile=alerte][priority=3] Priorité surchargée par dessus le profil

💬 Règles de réponse

Quand un message entrant correspond à des mots-clés, Jeedom lit une commande info et répond.

Exemple :

  • Mots-clés : température salon, temp salon
  • Réponse : Température salon : {#364#} °C — Humidité : {#365#} %

Cliquer sur + dans le champ réponse pour insérer une référence {#id#} via le sélecteur de commandes Jeedom. Plusieurs commandes peuvent être combinées dans le même template.


⚡ Règles d'action

Quand un message correspond, Jeedom exécute une action.

Sans confirmation → action immédiate + message de succès.

Avec confirmation → Jeedom envoie une notification avec boutons Oui ✓ / Non ✗. Le token expire après le délai configuré (défaut : 60 s).

attention

Les boutons ntfy s'affichent dans le détail du message (appui long ou tap sur la notification), pas en bandeau.


🔕 Mode silencieux

Par équipement :

  • Mode silencieux global : bloque tous les envois
  • Désactiver envois sortants : bloque send_message
  • Désactiver réponses automatiques : ignore les règles
  • Plages horaires : ex. silencieux de 22 h à 8 h
  • Comportement : bloquer complètement ou passer en priorité minimale (1)

🚨 Mode Secours

Le Mode Secours permet d'interroger et de dépanner Jeedom depuis l'application ntfy, même quand l'interface web est inaccessible (Apache ou PHP en panne, Jeedom qui ne répond plus).

Le démon ntfybridge tourne indépendamment de Jeedom. Il peut donc continuer à répondre à vos messages même quand tout le reste est KO.


⚙️ Configurer le Mode Secours

Ouvrir la configuration du plugin :

Plugins → ntfybridge → (icône secours)

📡 Topics secours

ChampDescription
Topic actionTopic ntfy sur lequel vous envoyez vos commandes de secours. Ex: maison_rescue
Topic réponseTopic sur lequel Jeedom vous répond. Peut être différent pour mieux organiser vos abonnements ntfy.
astuce

Séparer le topic secours de vos topics habituels permet de s'y abonner uniquement quand vous en avez besoin — sans polluer vos notifications normales.


🛠️ Commandes natives

Ces commandes sont disponibles sans aucune configuration supplémentaire, même si PHP est inaccessible.

Envoyez le mot-clé dans ntfy → Jeedom répond automatiquement.

CommandeCe que vous recevez
pingConfirmation de vie + heure du serveur, charge CPU, RAM libre, uptime
healthÉtat complet : CPU, RAM, espace disque, température, uptime
log ntfybridgedLes 20 dernières lignes du log du démon ntfybridge
log <nom_log>Les 20 dernières lignes de n'importe quel log Jeedom
jeedomRapport de santé Jeedom : base de données, plugins, services
emergencyDiagnostic Apache, PHP-FPM et MySQL — avec boutons Redémarrer pour chaque service en panne

Cocher les commandes à activer dans la modale Secours. Il est recommandé d'activer au minimum ping et emergency.

🔴 La commande emergency en détail

Quand vous envoyez emergency :

  1. Jeedom vérifie l'état d'Apache, PHP-FPM et MySQL
  2. Pour chaque service en panne, vous recevez une notification ntfy avec deux boutons : Oui ✓ (redémarrer) et Non ✗ (ignorer)
  3. Si vous appuyez sur Oui, le service redémarre et vous recevez un accusé de réception

Si tous les services sont opérationnels, vous recevez simplement un message "tout va bien".

Droits sudo nécessaires

Pour que le redémarrage des services fonctionne, les droits sudo doivent être accordés à l'utilisateur www-data. La modale Secours affiche exactement le bloc de configuration à copier dans /etc/sudoers.d/ntfybridge.


✏️ Commandes personnalisées

Vous pouvez ajouter vos propres commandes : envoyer un mot-clé dans ntfy déclenche l'exécution d'un script sur le serveur, et le résultat vous est renvoyé.

➕ Ajouter une commande

  1. Ouvrir la modale Secours
  2. Cliquer Ajouter une commande
  3. Remplir :
ChampDescription
NomLibellé affiché (ex: Espace disque)
Mots-clésCe que vous tapez dans ntfy pour déclencher la commande (ex: espace disque, disk)
ScriptFichier à exécuter, sélectionné parmi les scripts disponibles dans data/rescue_scripts/
TypeLangage du script : sh (bash), php, node, py (Python)
ConfirmationSi activé : Jeedom vous demande Oui/Non avant d'exécuter
TimeoutDélai maximum d'exécution en secondes (5–120 s)
  1. Cliquer Sauvegarder

📁 Déposer un script

Les scripts doivent être placés dans :

plugins/ntfybridge/data/rescue_scripts/

Formats acceptés : .sh, .php, .js, .py

Le script s'exécute et sa sortie (stdout) est envoyée comme réponse ntfy. En cas d'erreur ou de timeout, vous recevez un message d'erreur sans que le démon ne soit affecté.

Scripts de test fournis

Le dossier contient déjà quatre scripts de test (test_hello.sh, test_hello.php, test_hello.js, test_hello.py) qui renvoient simplement la date et la version du langage — pratique pour vérifier que l'exécution fonctionne avant d'ajouter vos propres scripts.

Sécurité
  • Seuls les fichiers avec une extension .sh, .php, .js ou .py sont acceptés
  • Les noms de fichiers suspects (tentatives de traversée de répertoire) sont automatiquement rejetés
  • L'accès est contrôlé par les ACL ntfy configurées dans le panel utilisateurs

📱 Pilotage depuis le téléphone

🍎 iOS — Raccourcis natifs

  1. App Raccourcis → Nouveau raccourci
  2. Ajouter l'action Demander du texte (invite facultative)
  3. Ajouter l'action Obtenir le contenu de l'URL
    • URL : https://ntfy.votredomaine.fr/mon_topic
    • Méthode : POST
    • Corps de la requête : Texte fourni par l'étape précédente
  4. Ajouter le raccourci sur l'écran d'accueil ou l'utiliser avec Siri
Invite facultative

Ne pas renseigner de question dans l'action "Demander du texte". Selon la version d'iOS, une invite obligatoire peut être envoyée avec le message et fausser la correspondance des mots-clés dans ntfybridge.

L'idée d'origine

ntfybridge est né de ce concept : un raccourci iOS envoie un POST → Jeedom reçoit et agit.

🤖 Android

ApplicationPoints forts
HTTP Request Shortcuts (F-Droid)Simple, widget, open-source
TaskerTrès puissant, automatisations avancées
MacroDroidAccessible, actions HTTP intégrées

📄 Logs

LogDescription
ntfybridgeLog principal du plugin et du démon

Activer Debug uniquement pour le diagnostic.


🌐 Configurer le reverse proxy (mode embarqué + sous-domaine)

L'assistant intégré génère la configuration Apache en 5 étapes.

Appliquer ensuite dans le terminal :

Étape 1 — Créer le fichier de config
sudo nano /etc/apache2/sites-available/ntfy.conf
# Coller le contenu généré par le wizard
Étape 2 — Certbot (si pas encore installé)
sudo apt install certbot python3-certbot-apache -y
Étape 3 — Activer et obtenir le certificat SSL
sudo a2ensite ntfy.conf
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite ssl headers
sudo apache2ctl configtest
sudo systemctl reload apache2
sudo certbot --apache -d ntfy.votredomaine.fr
Étape 4 — Vérifier
curl -I https://ntfy.votredomaine.fr
# Attendu : HTTP/2 200 (ou 401 si auth — normal ✅)

Retourner dans le wizard → Suivant → validation finale.

Renouvellement SSL automatique
sudo certbot renew --dry-run

🔍 Dépannage

❌ Le démon ne démarre pas

  • Vérifier Node.js ≥ 18 : node --version
  • Port ntfy libre : bouton Reset port dans la configuration
  • Consulter les logs : Plugins → ntfybridge → Logs

❌ Les boutons Oui/Non ne fonctionnent pas

L'URL externe Jeedom doit être accessible depuis Internet :

Configuration → Général → URL d'accès externe

🔕 Aucune notification reçue

  • Topic identique dans l'équipement et l'app ntfy
  • Utilisateur autorisé (allowedUsers)
  • Pas de mot interdit déclenché (blacklistWords)

🍎 Push iOS absent

Nécessite un sous-domaine HTTPS en mode embarqué, ou ntfy.sh en mode externe.