J'ai découvert ntfy en début 2023 grâce à une vidéo de DCJona proposée par YouTube. Et j'ai trouvé ntfy (prononcez notify) tellement bien que j'ai souhaité l'intégrer à mon système domotique (domoticz).
J'ai trouvé ntfy tellement bien pensé et ouvert que j'ai décidé d'écrire un script bash que je vous propose aujourd'hui. C'est grâce à ce script que Domoticz va envoyer des notifications via ntfy.
Exemple simple : j'ai créé un système de notification sur mobile dès que le prix d'un produit baisse.
Ntfy est l'élément qui manquait cruellement à Domoticz : un système de notification qui fonctionne gratuitement.
Je vous mets aujourd'hui mon script à disposition, après la validation de plusieurs personnes sur twitter (merci à elles!).
ntfy : comment ça marche ?
ntfy est un logiciel libre permet de recevoir des notifications push sur Android, iOS et dans un navigateur web de votre choix et gratuitement (et il le restera selon son créateur). Notez que l'application est aussi dispo sur le store libre F-Droid.
ntfy fonctionne comme un broker MQTT. Il faut s'abonner à un topic pour recevoir les notifications associées. Pour ceux à qui ça ne parle pas dites-vous c'est le même principe que yopmail, toutes les adresses emails existent déjà vous n'avez rien à créer. Ici les adresses emails sont des topics.
Un topic est un nom de votre choix, que vous ajouterez derrière l'URL de l'instance ntfy :
Ici le nom du topic est "blogmotion_test"
Combien coûte ntfy ?
Il existe des abonnements payants mais pour ĂŞtre honnĂŞte la version gratuite est largement suffisante pour mes besoins :
J'utilise l'offre gratuite et je suis bien loin d'utiliser la quota des 500 notifications par jour.
J'utilise ntfy.sh ou je crée ma propre instance ?
2 possibilités existent pour utiliser ntfy :
- utiliser l'instance publique (ntfy.sh)
- créer et héberger votre propre instance
Vous pouvez tout à fait débuter avec l'instance publique pour jouer avec avant de migrer vers une instance privée. L'inconvénient principal est que tout ce que vous envoyez sera public. N'envoyez aucune donnée personnelle et/ou confidentielle.
Et si j'utilise un nom de topic déjà existant, de quelqu'un d'autre ? et bien comme avec yopmail vous verrez le contenu de l'autre personne, et vous ne vous sentirez pas vraiment chez vous 🙂 Même si vous utilisez un nom de topic très long il reste une probabilité que quelqu'un tombe dessus.
De mon côté je vous conseille de faire un sha256 d'un fichier avec un contenu aléatoire puis d'ajouter un suffixe à la valeur du condensat. Ainsi il sera peu probable que quelqu'un tombe sur votre topic. Cependant, rien n'empêche l'interception du message vers le serveur ntfy.
Je le répète donc encore une fois : n'utilisez pas l'instance publique si vous faites transiter des infos personnelles...
S'abonner dans l'application mobile
L'application Android est particulièrement bien faite et efficace! Elle dispose de tout ce qu'il faut et elle est très réactive.
Pour s'abonner Ă un topic il suffit de saisir son nom, et c'est parti.
(Je n'ai pas testé la version iPhone)
Présentation du script ntfy-ng (bash) 👇
J'ai développé 2 versions du script :
- ntfy-ng.sh : un seul script avec des variables
- ntfy-ng-with-conf : un script avec un fichier de configuration à côté
Pourquoi 2 versions ?
j'étais parti sur la version classique avec un seul fichier mais en discutant avec mes différents testeurs ils m'ont fait remonté ce besoin. La version avec un fichier de configuration (with-conf) permet plus de modularité car vous pouvez avoir un fichier de configuration par application en fonction de vos besoins. Par exemple : un fichier de conf pour domoticz, un pour vos scripts persos, etc.
Des exemples d'utilisation sont présents en commentaire dans chaque version du script :
ntfy-ng.sh "Voici un message" ntfy-ng.sh --message "Voici un message" ntfy-ng.sh --topic "topic_name" --message "Voici un message" ntfy-ng.sh --topic "topic_name" --message "Voici un message" --tags chart_with_downwards_trend,money_mouth_face --prio 5
Et pour la version avec fichier de conf :
ntfy-ng-withconf.sh "Hello World" ntfy-ng-withconf.sh --message "Hello World" ntfy-ng-withconf.sh --topic "nom_du_topic" --message "Voici un message" ntfy-ng-withconf.sh --topic "nom_du_topic" --message "Voici un message" --tags chart_with_downwards_trend,money_mouth_face --prio 5 ntfy-ng-withconf.sh --config "custom.cfg" --topic "nom_du_topic" --message "Voici un message" --tags chart_with_downwards_trend,money_mouth_face --prio 5
Les 2 versions du script font la même chose, dans la version withconf vous avez un fichier de configuration pour définir vos variables (ntfy.cfg par défaut) et dans l'autre c'est directement dans le script bash en variables classiques.
Intégration à Domoticz
ntfy est nativement intégré à Home Assistant mais pas à Domoticz, voyons comment y remédier.
Une fois que vous avez copié la version ntfy-ng.sh dans le répertoire contenant vos scripts (ex: /home/pi) rendez le script exécutable :
chmod +x /home/pi/ntfy-*.sh
Dans le menu Configuration > Paramètres > Notification > HTTP personnalisé/Action
# TO : nom du topic (au choix)
# URL / Action :
script:///home/pi/ntfy.sh -o #TO -m "#MESSAGE"
POST Content-Type: application/json
Et c'est tout, vérifiez à l'aide du bouton "tester" que la notification arrive bien (sur votre smartphone ou en navigateur web) :
Pour recevoir une notification d'un capteur activez "http" dans la partie notification de votre capteur, avec un message au choix (les émoji sont supportés) :
Vous pouvez aussi préciser l'appel du script en dur dans le champ "action" mais il faudra le faire sur chaque capteur... pas pratique.
Avec une URL (webhook GET)
Enfin si vous avez un périphérique comme un Shelly qui permet uniquement de préciser une URL comme service de notification, vous pouvez utilisez un appel GET en précisant le topic et le message :
https://ntfy.sh/blogmotion_ntfy_demo/publish?message=voici+un+message
Voir documentation webhook.
Conclusion
J'espère que la découverte de ntfy vous donnera plein d'idée de scripts et de notification, cela ne se limite pas seulement à la domotique. Pour utiliser le système depuis plusieurs mois cela fonctionne vraiment bien et les notifications arrivent toujours en instantané (quand ça n'est pas le cas c'est plutôt lié au mode optimisation de batterie du tel).
Merci aux différents twittos pour leurs tests et remontées 👍
Il existe une alternative : EZAlert (doc shelly)
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
8 commentaires
CC-BY-ND n'est pas une licence libre. Pourquoi avoir mis une licence privative sur vos scripts ? Sauf la CC0, il vaut mieux en général éviter toutes les licences CC qui font croire que c'est libre alors que souvent, cela ne l'est pas. Entre la MIT et la GPL, il y a le choix d'une licence héréditaire ou non.
@Sytoka: Hello, j'ai modifié en by-nc-sa (je verrai plus tard si je passe sur un autre type de licence). Si cela coince toujours pour vous merci de me dire sur quel aspect ? (logiquement seul la partie commerciale est bloquée)
Merci pour cet article !
J'avais regardé et testé ntfy, mais pas intégré avec domoticz .. cela vaut le coup, j'y rejette un oeil, voir les deux 🙂 / Merci !
Bjr. Je n'arrive pas à envoyer les messages souhaités dans mes blocky. Je reçois tjs le message par défaut ?
Aurais-je loupé qqchose ?
Merci de votre réponse.
Nicolas
@Nicolas: Bonjour Nicolas, dans blockly il faut choisir "start script" (dans "messages") et choisir :
Start script :
with parameters :
salut arrve tu a envoye des images avec home assistant?
Bonjour ,
Dans un script l'envoi de notification par HTTP :
Example:
domoticz.notify("xxxx", 'GARAGE OUVERT depuis ' .. minutes .. 'mn, alerte n°' .. alpha .. '/', domoticz.PRIORITY_HIGH,nil,nil,domoticz.NSS_HTTP)
Mais le changement de priorité n'est pas pris en compte, une idée ?
Bonjour
Je recevais aussi toujours le message par défaut. Il faut ajouter les arguments au script bash. Pour corriger j'ai modifié la ligne URL/Action comme ceci
script:///home/pi/ntfy-ng.sh -o #TO -m #MESSAGE et ça fonctionne