Hello,
J’ai mit en place un subflow Node-RED qui permet de regrouper tous type d’outils de communication (à la base pour les utilisateurs de Node-RED / Home Assistant) et depuis peu j’ai mit en place le système de notification via HTTP (GET) ce qui rend le sublow utilisable par n’importe qu’elle outil capable de faire du get HTTP (y comprit Jeedom).
Celui-ci nécessite quelques connaissance en Node-RED, mais je sais que divers utilisateurs de Jeedom l’utilise déjà
Libre à vous de contribuer et d’ajouter divers connecteur liée à jeedom
Exemple d’utilisation :
curl "https://URL.VERS.NODERED/notif?title=test&dest=discord_maison_general&message=coucou"
curl "https://URL.VERS.NODERED/notif?title=test1&dest=tel_clement&message=coucou1"
curl "https://URL.VERS.NODERED/notif?title=test3&dest=mail_clement&message=coucou2"
Bref, bon amusement !
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 (via Home Assistant)
- Discord
- Mattermost
- Telegram
- TTS (via Home Assistant)
- 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
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_maman": "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_maman": "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