Gestion des notifications HTML5 / Discord / Home Assistant / Email / TTS / Telegram

node-red-flow-notification

Liens vers le flow : ici

Petit screen :

Information

Ce subflow va vous permettre de notifier plusieurs service en même temps.

Actuellement il gérée les services :

  • HTML5 (by Home Assistant)
  • Discord
  • Mattermost
  • Telegram
  • Email
  • TTS
  • Home Assistant (Mobile App)
  • SMS via HTTP
  • Awtrix

Pré-requis

  • node-red-contrib-string
  • node-red-contrib-home-assistant-websocket
  • node-red-node-email
  • node-red-contrib-telegrambot

Entrée

Node-RED :

Voici la liste des inputs actuellement possible :

msg.title = "Home Assistant - New version available"
msg.dest = "tel_clement;mail_clement;tts_80_hall"  
msg.message = "Home Assistant : New version available => 0.113.0 \nhttps://github.com/home-assistant/core/releases/tag/0.113.0"
msg.short_message = "Home Assistant : New version available (0.113.0)"
msg.image = "/data/image.jpeg"
msg.document = "/data/doc.js"
msg.video = "/data/video.mp4"

HTTP (GET) :

Il est possible d’utiliser le service de notification via n’importe qu’elle autres services même ceux non reliée à Node-RED
via le endpoint HTTP (GET) /notif.

Exemple :

https://URL.VERS.NODERED/notif?title=test&dest=discord_maison_general&message=coucou

Liste des inputs possible :

Tout les inputs ne sont pas forcément compatible avec les différents services.

Titre / msg.title

Disponible sur : Email

Titre du mail.

Exemple:

msg.title = "Home Assistant - New version available"

Message / msg.message

Disponible sur : Email / Telegram / Discord

Version longue du message.

Exemple:

msg.message = "Home Assistant : New version available => 0.113.0 \n https://github.com/home-assistant/core/releases/tag/0.113.0"

Message court / msg.short_message

Disponible sur : HTML5 / Home Assistant

Message reduit pour les services type « popup ».

Exemple:

msg.short_message = "Home Assistant : New version available (0.113.0)"

ATTENTION : Les messages est trim et les \n sont remplacer par des espace

=> Si il n’est pas défini, je reprend les msg.message

Image / msg.image

Disponible sur : Telegram

Exemple:

msg.image = "/data/image.jpeg"
msg.image = "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__340.jpg"

Document / msg.document

Disponible sur : Telegram

Exemple:

msg.document = "/data/doc.js"

Video / msg.video

Disponible sur : Telegram

Exemple:

msg.video = "/data/video.mp4"

Destinatation / msg.dest

Un string qui contient la liste des services que vous désirez notifier séparer par des « ; »

Exemple:

msg.dest = "tel_clement;mail_clement;tts_80_hall"

Le message sera envoyé à :

  • tel_clement
  • mail_clement
  • tts_80_hall

HTML5
La totalité des messages passe par ce système par défaut, pas besoin de l’ajouter en destination.

Discord

Dest doit commencer par discord_

Exemple:

msg.dest = "discord_communaute_news;discord_maison_information;discord_maison_network"

Home Assistant

Dest doit commencer par tel_

Exemple:

msg.dest = "tel_clement;tel_papa;tel_maman

Email

dest doit commencer par mail_

Exemple:

msg.dest = "mail_clement;mail_thomas"

Telegram

dest doit commencer par telegram_

Exemple:

msg.dest = "telegram_smarthome;telegram_familly"

TTS

dest doit commencer par tts_

Format : tts_{VOLUME}_{ENTITY_ID_DU_MEDIA_PLAYER}

Exemple:

msg.dest = "tts_80_hall"

SMS
dest doit commencer par sms_

Exemple:

msg.dest = "sms_clement"

Awtrix
dest doit commencer par awtrix_

Exemple:

msg.dest = "awtrix_home"

Configuration

Le subflow récupére sa configuration via la variable Global notif.

TTS n’a besoin d’aucune configuration particulière

Exemple:

var configuration = 
{
    "discord": {
        "dest": {
            "discord_communaute_news": "https://discord.com/api/webhooks/XXXXXXXXXXXXXXXX",
            "discord_communaute_zwave": "https://discord.com/api/webhooks/YYYYYYYYYYYYYYYY",
            "discord_communaute_diy": "https://discord.com/api/webhooks/ZZZZZZZZZZZZZZZZZ",
        }
    },
    "home_assistant": {
        "dest": {
            "tel_clement": "mobile_app_oneplus_a6010",
            "tel_nathalie": "mobile_app_oneplus_a5000"
        }
    },
    "email": {
        "dest": {
            "mail_clement": "email1@domain.fr",
            "mail_john": "email2@domain.fr",
            "mail_bibi": "email3@domain.fr"        
        }
    },
    "telegram": {
        "dest": {
            "telegram_smarthome": "ID1",
            "telegram_bot": "ID2"        
        }
    },
    "mattermost": {
        "dest": {
            "mattermost_home" : "https://mattermost.domain.fr/hooks/XXXXXXXXXXXXXXXXXXXXXXXXX",
            "mattermost_volets" : "https://mattermost.domain.fr/hooks/YYYYYYYYYYYYYYYYYYYYYYYY",
        }
    },
    "sms": {
        "url": "http://192.168.1.1:8080/?action=sendSms&number=##SMSNUMBER##&message=##MESSAGE##",
        "dest": {
            "sms_clement": "06XXXXXXXXX",
            "sms_nathalie": "06YYYYYYYYY",
        }
    },
    "awtrix": {
        "dest": {
            "awtrix_home": "192.168.1.1:7000",
            "awtrix_desk": "192.168.1.2:7000",
        }
    }
}
global.set("notif",configuration)

Pour vous aidez dans la configuration voici une function qui va vous permettres de pousser votre configuration à chaque deploiement.

Tout ce passe dans le node Function.

[
    {
        "id": "bbda9cf1.ad8ba",
        "type": "inject",
        "z": "a9ae8a01.8a5bd8",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 290,
        "y": 260,
        "wires": [
            [
                "513d2c9.069c3d4"
            ]
        ]
    },
    {
        "id": "dacca689.055138",
        "type": "function",
        "z": "a9ae8a01.8a5bd8",
        "name": "Configurateur EXEMPLE",
        "func": "var configuration = \n{\n    \"discord\": {\n        \"dest\": {\n            \"discord_communaute_news\": \"https://discord.com/api/webhooks/XXXXXXXXXXXXXXXX\",\n            \"discord_communaute_zwave\": \"https://discord.com/api/webhooks/YYYYYYYYYYYYYYYY\",\n            \"discord_communaute_diy\": \"https://discord.com/api/webhooks/ZZZZZZZZZZZZZZZZZ\",\n        }\n    },\n    \"home_assistant\": {\n        \"dest\": {\n            \"tel_clement\": \"mobile_app_oneplus_a6010\",\n            \"tel_nathalie\": \"mobile_app_oneplus_a5000\"\n        }\n    },\n    \"email\": {\n        \"dest\": {\n            \"mail_clement\": \"email1@domain.fr\",\n            \"mail_john\": \"email2@domain.fr\",\n            \"mail_bibi\": \"email3@domain.fr\"        \n        }\n    },\n    \"telegram\": {\n        \"dest\": {\n            \"telegram_smarthome\": \"ID1\",\n            \"telegram_bot\": \"ID2\"        \n        }\n    },\n    \"mattermost\": {\n        \"dest\": {\n            \"mattermost_home\" : \"https://mattermost.domain.fr/hooks/XXXXXXXXXXXXXXXXXXXXXXXXX\",\n            \"mattermost_volets\" : \"https://mattermost.domain.fr/hooks/YYYYYYYYYYYYYYYYYYYYYYYY\",\n        }\n    },\n    \"sms\": {\n        \"url\": \"http://192.168.1.1:8080/?action=sendSms&number=##SMSNUMBER##&message=##MESSAGE##\",\n        \"dest\": {\n            \"sms_clement\": \"06XXXXXXXXX\",\n            \"sms_nathalie\": \"06YYYYYYYYY\",\n        }\n    }\n}\nglobal.set(\"notif\",configuration)\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 700,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "513d2c9.069c3d4",
        "type": "change",
        "z": "a9ae8a01.8a5bd8",
        "name": "Remove old config",
        "rules": [
            {
                "t": "delete",
                "p": "notif",
                "pt": "global"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 470,
        "y": 260,
        "wires": [
            [
                "dacca689.055138"
            ]
        ]
    }
]

Et voici un exemple de flow d’input :

[{"id":"66da3fb7.1e4ff","type":"change","z":"8a8a63c5.0c3c2","name":"","rules":[{"t":"set","p":"title","pt":"msg","to":"Coucou","tot":"str"},{"t":"set","p":"message","pt":"msg","to":"Long Message","tot":"str"},{"t":"set","p":"short_message","pt":"msg","to":"Short Message","tot":"str"},{"t":"set","p":"dest","pt":"msg","to":"tel_clement;mail_clement","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":1880,"wires":[["7300bcc2.c97c34"]]}]

#Enjoy

3 « J'aime »

merci il a encore évoluer depuis mes tests avant hier ^^

Yep je suis encore en train de bosser dessus :slight_smile:

Je viens de maj le flow avec une gestion du volume sur le TTS.

En gros il regarde le volume avant de le set et le remet à la valeur initial avant d’éteindre le media_player.

J’ai également ajouter un check afin que le TTS ne viennent pas couper la musique du player si celui-ci est en lecture.
=> J’aimerais lui faire reprendre la musique en cours, sauf que je n’ai pas l’info qui me permet de récupérer la playlist courante :confused:

Hop nouvelle version du soir avec :

  • La gestion des fichier/video/images sur Telegram.
  • Migration à ChatBot
  • Divers Fix & améliorations

Cf. message initial pour récupérer la dernière version.

Ne pratiquant pas Node-Red j’ai du mal à bien évaluer la qualité et l’intérêt, cependant j’apprécie beaucoup l’intention de partage.
Est-ce que cela ne serait pas plus pratique de mettre ton sub flow sur Github ?

Pour le partage Github c’est prévu :slight_smile:

1 « J'aime »

Bonjour, j’ai intégré ce flow sans souci à ma config node red. Cependant dans un de mes flows j’utilise le node « switch telegram » et cela me provoque un conflit. J’ai ce message d’erreur dans node red toutes les 6-7s : « ETELEGRAM: 409 Conflict: terminated by other getUpdates request; make sure that only one bot instance is running »

Il n’y a pas possibilité d’utiliser deux palettes Telegram différentes en paramétrant le même bot (Token) ?

Merci

Hello @Jex2512,

J’ai maj pas mal le flow depuis et je viens de le push sur Github la dernière version :slight_smile:
=> https://github.com/m4dm4rtig4n/node-red-flow-notification

Pour le node Télégram, au pire il te suffit de remplacer mon node par le tiens, après il y aura peut être quelques adaptation à faire.

Salut,
Tout d’abord félicitations pour ce flow, il est vraiment complet ! Je vais récupérer la dernière version sur github.

J’ai regardé les nodes présents dans la palette que tu utilises, et il y a un node « Keyboards ». J’ai pas encore réussi à faire ce que je veux avec mais cela semble correspondre à ce que je veux faire.

J’ai pas souvenir qu’il y est un node de ce type

hello @M4dm4rtig4n

merci pour ton partage, mais étant un gros débutant dans HA, je n’arrive pas à utiliser ta gestion de notifs.
pourrait tu partager un exemple d’un scénario ou qui fait appel à ce flow de notif?
merci

Pareil pour moi :wink: En parallèle doit il y avoir la configuration de telegram dans le yaml?

C’est compliqué à expliqué mais super simple à utiliser :stuck_out_tongue:

Exemple :

Et un exemple de configuration :

Pour discord, il suffit de créer un webhook et d’en renseigner l’url dans le configurateur.

merci mais je ne trouve pas le 2eme bloc dans ma liste Node Red.
C’est quoi comme type de bloc (celui qui est bleu avec le nom Notification)

C’est mon sublow qui tu as importer normalement.

1 « J'aime »

ok super, je n’avais pas saisi le fait de devoir créer un subflow!
je viens de réimporter via ton GitHub et cette fois ci, la création c’est fait en subflow directement!
alors j’ai réussi à faire une notification TTS sur mon Google Nest Hub!

Concernant la partie configuration via les variables globales, j’ai du relire plusieurs fois pour comprendre qu’il fallait créer un flow (grâce à son exemple) qui permet de créé ces variables globales.
par contre, est ce que ces variables restent même après un redémarrage de Node Red? ou faut il exécute ce flow de setup variable à chaque reboot?

concernant le HTML5, est ce qu’il y a un prérequis car j’ai une erreur API…

Merci encore bcp pour ton partage!

Pour les variables, il faut que tu pense à activer la persistance dans Node-RED, pour ce faire ajouter ceci dans le settings.js :

...
    contextStorage: {
      default: "file",
      memoryOnly: { module: 'memory' },
      file: { module: 'localfilesystem' }
    },
...

Pour le HTML5, je passe par HA et il te faut donc activer celui dans HA (tout est expliqué ici) + sur ton profil HA dans la configuration de ton utilisateur :

1 « J'aime »

super merci encore!
tout fonctionne quand j’utilise le inject!
je vais continuer à faire mon noob mais comment dans un flow tu créé ton msg.dest et msg.message? en utilisant un node String?

Merci encore @M4dm4rtig4n pour le taff énorme qui m’a permis de bien comprendre Node Red.
Je me permet de rajouter ma pierre à l’édifice avec la fonctionnalité d’envoi de SMS via JPI.
comme beaucoup issue de Jeedom j’utilise JPI donc ca peu peut être servir…

voila le bloc que j’ai ajouté :

voici le détail de chaque bloc :
pour la récupération de numéro

pour réencoder le message en html :

enfin pour envoyer le sms :


en sachant que l’URL est de la forme : http://xxx.xxx.xxx.xxx:8080/?action=sendSms&number={{sms_number}}&message={{message}}

enfin bien configurer les variables :

en espérant que cela serve :wink: