Node-RED : SubFlow de notification universelle

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à :slight_smile:

Libre à vous de contribuer et d’ajouter divers connecteur liée à jeedom :slight_smile:

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
  • Email
  • 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

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_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

4 « J'aime »

Salut,

Penses-tu que ce que tu expliques ici puisse être utilisé pour ce petit projet d’affichage d’un volet roulants en node-red ?

Je ne comprends pas trop et j’aimerais bien.

Merci d’avance