Envoi d'un snapshot caméra sur mon bot telegram via nodered

Bonjour,
J’ai un dialogue entre nodered et telegram avec une commande /data et 3 choix, mais le choix spanshot d’une caméra ne veut pas fonctionner.

Voilà le flux global :

En haut l’affichage de la commande /data avec 3 choix : 1-temp, 2-humid, 3-cam

Dessous le call_back query qui fonctionne très pour les choix 1 et 2
Puis le camera.snapshot qui appelle le service et m’enregistre bien l’image dans le bon répertoire

Mais apparemment le function 6 ne relit pas cette image ou ne construit pas le bon payload vers telegram send

le code du function 6 :

msg.payload = {
  type: " photo " ,
  chatId: " xxxxxxxxxxxx " , // Remplacez par votre chat ID
  photo: " /config/www/snapshot_reolink-cour.jpg " , // Chemin de la photo
  caption: " Image PTZ " + (msg.payload.caption || "") + " %" // Récupère l'ancien caption si présent
};

return msg;

alors je tente de progresser mais sans succès.

j’ai remplacé le lien du fichier par l’url https nabucasa complète que j’ai testé auparavant sur un navigateur et aussi depusi un réseau externe, et l’image s’affiche bien.
testé aussi avec un curl -X post et l’image s’est bien affichée dans le bon bot telegram

actuellement j’ai cette syntaxe dans le noeud function précédant le sender :

msg.payload = {
  type: "photo",
  chatId: "5699281820",
  image: "https://fxxxxxxxxxxx0dqkmrxvskzl2sun4h.ui.nabu.casa/local/snapshot_cour.jpg",
  caption: "Image capturée par la caméra"
};
return msg;

mais j’ai ce retour dans le debug en sortie du function :

{"type":"photo","chatId":"5699281820","image":"https://fyljyk9jid8jyw0dqkmrxvskzl2sun4h.ui.nabu.casa/local/snapshot_cour.jpg","caption":"Image capturée par la caméra"}

et rien dans le bot

si je remplace type: photo par message + un content avec un message texte, le message arrive bien…

bref… je sais plus quoi faire…

Alors j’ai progressé en changeant image par content, et là ça fonctionne !

J’ai alors complété mon flux avec un choix 4 pour une 2 ème caméra.

Ca fonctionne aussi, sauf que les images renvoyées sont en fait des images anciennes et toujours les mêmes, pire c’est toujours une image de la cam 1 qui est renvoyée même quand je fait le choix 4 pour la 2ème caméra.

Dans le répertoire les snapshot sont bons et à jour.

C’est comme si les noeuds function n’accédaient pas à l’url et se bornaient à ressortir une image en cache quelque part…

Je sais pas si je suis clair… je peux fournir d’autres éléments.

le flux global :

Les choix :

var opts = {
    reply_markup: JSON.stringify({
        "inline_keyboard": [[
            {
                "text": "Temperature",
                "callback_data": "1"
            },
            {
                "text": "Humidity",
                "callback_data": "2"                
            },
            {
                "text": "CamCour",
                "callback_data": "3"                
            },
            {
                "text": "CamPTZ",
                "callback_data": "4"                
            }                                    
            ]
        ]
    })
};

msg.error = false;

msg.payload.content = 'Selection?';
msg.payload.options = opts;

msg.payload.chatId = xxxxxxxxxx;
msg.payload.type = "message";

return [msg];

Le switch ou commuter :

Bonjour @bemo47
J’avais eu le même souci, donc j’ai nommé les images avec un ID aléatoire et une date:
Ci-dessous le contenu des onglets « Message reçu » des noeuds Function.

function getRandomInt(max) {
    return Math.floor(Math.random() * Math.floor(max));
}
let da = new Date();
let actuel = da.getFullYear() + "-" + da.getMonth()+ "-" + da.getDate();

var numberal = getRandomInt(100000);

msg.payload = actuel + "_"+ Number(numberal);
global.set('numblc', msg.payload);
return msg;
let monnum = global.get('numblc');
let d = new Date();
let hours = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();

msg.payload = {
    "type": "photo",
    "chatId": "53xxxxxx86",
    "caption": "Photo Salon 1 à " + hours + " N° " +monnum,
    "content": "https://nomdedomaine.fr/local/snapshot/" + monnum + "_snapshot_CameraSalon.jpg"
};
return msg;

Après ce noeud il y a le noeud Sender.
J’ai autant de noeuds function/sender que de caméra.
Bob

Ah tu avais aussi des images qui ressortaient à la place des dernières capturées ?
Avoir le même nom ça me semblait bien pour ne pas engorger le répertoire…
Après on peut avoir un script qui cleane le répertoire ? voire après chaque envoi ? il y a bien un noeud nodered qui pourrait faire ça, à placer après le noeud sender ?
Quoique le problème vient peut être du nom dans l’url, s’il ne change jamais on a cette image cachée je ne sais où qui revient… donc un nom aléatoire est peut être bien
Mais un cleanup du répertoire resterait bienvenu…

Je teste ta solution…

edit : quoique ici il y a une suggestion en utilisant un buffer entre le snapshot et le noeud function , j’ai pas tout compris mais c’est une piste à creuser
https://discourse.nodered.org/t/envoi-dune-image-snapshot-via-nodered-sous-home-assistant/96751/2

Et ça marche !!!

A tester dans le temps, j’aimerai aussi avoir le principe d’avoir 1 seule commande qui présente tous les choix avec un switch derrière selon le choix… j’ai essayé mais pas réussi

sinon en flux unitaires comme ici ça fonctionne, le bon snapshot est affiché

edit : et sans le delay ça semble fonctionner aussi

J’ai mutualisé le send picture et le telegram sender à la fin, 6 caméras et c’est parfait !

quand ça marche c’est un plaisir !


1 « J'aime »

Partage le flux stp pour la communauté @bemo47 :smirk:
Bob

Voilà le flux, je l’avais publié puis enlevé car tellement d’infos que je n’étais pas sûr de l’avoir assez anonymisé, jettes un oeil au cas ou j’aurai laissé des trucs en trop…

[
    {
        "id": "d838f64686718fd4",
        "type": "tab",
        "label": "Snapshot camérs",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "4cdb400.5a8f3c",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/ptz",
        "command": "/ptz",
        "description": "",
        "registercommand": false,
        "language": "",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": false,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 1,
        "x": 230,
        "y": 320,
        "wires": [
            [
                "c9163001cd8adc76"
            ]
        ]
    },
    {
        "id": "fdbea5e0.730e08",
        "type": "http request",
        "z": "d838f64686718fd4",
        "name": "",
        "method": "GET",
        "ret": "bin",
        "paytoqs": "ignore",
        "url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.ui.nabu.casa/local/snapshot_ptz.jpg",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 730,
        "y": 320,
        "wires": [
            [
                "14ed2a75924433b1"
            ]
        ]
    },
    {
        "id": "b5d7e8fa.e4aa08",
        "type": "telegram sender",
        "z": "d838f64686718fd4",
        "name": "",
        "bot": "f9e88713e8567cb0",
        "haserroroutput": false,
        "outputs": 1,
        "x": 970,
        "y": 560,
        "wires": [
            []
        ]
    },
    {
        "id": "c9163001cd8adc76",
        "type": "api-call-service",
        "z": "d838f64686718fd4",
        "name": "",
        "server": "59781b09.703574",
        "version": 7,
        "debugenabled": true,
        "action": "camera.snapshot",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "camera.ptz_obs_ptz_obs"
        ],
        "labelId": [],
        "data": "{\"filename\":\"/config/www/snapshot_ptz.jpg\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "camera",
        "service": "snapshot",
        "x": 530,
        "y": 320,
        "wires": [
            [
                "fdbea5e0.730e08"
            ]
        ]
    },
    {
        "id": "e03ce5f0493faf63",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/cour",
        "command": "/cour",
        "description": "",
        "registercommand": false,
        "language": "",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": false,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 1,
        "x": 230,
        "y": 380,
        "wires": [
            [
                "6e4910b92d209a63"
            ]
        ]
    },
    {
        "id": "3aa074dc28344ac5",
        "type": "http request",
        "z": "d838f64686718fd4",
        "name": "",
        "method": "GET",
        "ret": "bin",
        "paytoqs": "ignore",
        "url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.ui.nabu.casa/local/snapshot_cour.jpg",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 730,
        "y": 380,
        "wires": [
            [
                "14ed2a75924433b1"
            ]
        ]
    },
    {
        "id": "6e4910b92d209a63",
        "type": "api-call-service",
        "z": "d838f64686718fd4",
        "name": "",
        "server": "59781b09.703574",
        "version": 7,
        "debugenabled": true,
        "action": "camera.snapshot",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "camera.reolink_cour_reolink_cour"
        ],
        "labelId": [],
        "data": "{\"filename\":\"/config/www/snapshot_cour.jpg\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "camera",
        "service": "snapshot",
        "x": 530,
        "y": 380,
        "wires": [
            [
                "3aa074dc28344ac5"
            ]
        ]
    },
    {
        "id": "68446867b329e231",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/grenier",
        "command": "/grenier",
        "description": "",
        "registercommand": false,
        "language": "",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": false,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 1,
        "x": 230,
        "y": 440,
        "wires": [
            [
                "96bf173a63d95332"
            ]
        ]
    },
    {
        "id": "47a8212a8f94847e",
        "type": "http request",
        "z": "d838f64686718fd4",
        "name": "",
        "method": "GET",
        "ret": "bin",
        "paytoqs": "ignore",
        "url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxx.ui.nabu.casa/local/snapshot_grenier.jpg",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 730,
        "y": 440,
        "wires": [
            [
                "14ed2a75924433b1"
            ]
        ]
    },
    {
        "id": "96bf173a63d95332",
        "type": "api-call-service",
        "z": "d838f64686718fd4",
        "name": "",
        "server": "59781b09.703574",
        "version": 7,
        "debugenabled": true,
        "action": "camera.snapshot",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "camera.parc_new_parc_new"
        ],
        "labelId": [],
        "data": "{\"filename\":\"/config/www/snapshot_grenier.jpg\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "camera",
        "service": "snapshot",
        "x": 530,
        "y": 440,
        "wires": [
            [
                "47a8212a8f94847e"
            ]
        ]
    },
    {
        "id": "e3f3671e90d45a6f",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/atelier",
        "command": "/atelier",
        "description": "",
        "registercommand": false,
        "language": "",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": false,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 1,
        "x": 230,
        "y": 500,
        "wires": [
            [
                "3ad81ce26ac18a20"
            ]
        ]
    },
    {
        "id": "9f64bbeefcb0080a",
        "type": "http request",
        "z": "d838f64686718fd4",
        "name": "",
        "method": "GET",
        "ret": "bin",
        "paytoqs": "ignore",
        "url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.ui.nabu.casa/local/snapshot_atelier.jpg",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 730,
        "y": 500,
        "wires": [
            [
                "14ed2a75924433b1"
            ]
        ]
    },
    {
        "id": "14ed2a75924433b1",
        "type": "function",
        "z": "d838f64686718fd4",
        "name": "send picture",
        "func": "var pl = {\n  content: msg.payload,\n  message: `Hey ${msg.originalMessage.from.first_name}, here is the random piture you requested`,\n  type : 'photo',\n  chatId: xxxxxxxxxx,\n  chat: msg.originalMessage.chat,\n  from: msg.originalMessage.from,\n  message_id : msg.originalMessage.message_id\n}\n\nmsg.payload = pl;\n\n\n/* type can be one of the following\nphoto\naudio\nvideo\nsticker\nvoice\ndocument\n*/\n\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 950,
        "y": 440,
        "wires": [
            [
                "b5d7e8fa.e4aa08"
            ]
        ]
    },
    {
        "id": "3ad81ce26ac18a20",
        "type": "api-call-service",
        "z": "d838f64686718fd4",
        "name": "",
        "server": "59781b09.703574",
        "version": 7,
        "debugenabled": true,
        "action": "camera.snapshot",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "camera.atelier"
        ],
        "labelId": [],
        "data": "{\"filename\":\"/config/www/snapshot_atelier.jpg\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "camera",
        "service": "snapshot",
        "x": 530,
        "y": 500,
        "wires": [
            [
                "9f64bbeefcb0080a"
            ]
        ]
    },
    {
        "id": "7246c0adf0f2821a",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/obs",
        "command": "/obs",
        "description": "",
        "registercommand": false,
        "language": "",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": false,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 1,
        "x": 230,
        "y": 560,
        "wires": [
            [
                "6d9af760d4f47e1c"
            ]
        ]
    },
    {
        "id": "e6e0ae32dcbb54d6",
        "type": "http request",
        "z": "d838f64686718fd4",
        "name": "",
        "method": "GET",
        "ret": "bin",
        "paytoqs": "ignore",
        "url": "https://fyljyk9jid8jyw0dqkmrxvskzl2sun4h.ui.nabu.casa/local/snapshot_obs.jpg",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 730,
        "y": 560,
        "wires": [
            [
                "14ed2a75924433b1"
            ]
        ]
    },
    {
        "id": "6d9af760d4f47e1c",
        "type": "api-call-service",
        "z": "d838f64686718fd4",
        "name": "",
        "server": "59781b09.703574",
        "version": 7,
        "debugenabled": true,
        "action": "camera.snapshot",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "camera.foscam_foscam"
        ],
        "labelId": [],
        "data": "{\"filename\":\"/config/www/snapshot_obs.jpg\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "camera",
        "service": "snapshot",
        "x": 530,
        "y": 560,
        "wires": [
            [
                "e6e0ae32dcbb54d6"
            ]
        ]
    },
    {
        "id": "8eceaff9b3ed2e3d",
        "type": "telegram event",
        "z": "d838f64686718fd4",
        "name": "",
        "bot": "f9e88713e8567cb0",
        "event": "callback_query",
        "autoanswer": false,
        "x": 120,
        "y": 120,
        "wires": [
            [
                "873722f06c6eb5dc"
            ]
        ]
    },
    {
        "id": "873722f06c6eb5dc",
        "type": "function",
        "z": "d838f64686718fd4",
        "name": "function 3",
        "func": "msg.callback = msg.payload;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 280,
        "y": 120,
        "wires": [
            [
                "8573d92109b4a85d"
            ]
        ]
    },
    {
        "id": "8573d92109b4a85d",
        "type": "switch",
        "z": "d838f64686718fd4",
        "name": "",
        "property": "payload.content",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "3",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "4",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "5",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "6",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "7",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": true,
        "outputs": 5,
        "x": 180,
        "y": 220,
        "wires": [
            [
                "c9163001cd8adc76"
            ],
            [
                "6e4910b92d209a63"
            ],
            [
                "96bf173a63d95332"
            ],
            [
                "3ad81ce26ac18a20"
            ],
            [
                "6d9af760d4f47e1c"
            ]
        ]
    },
    {
        "id": "f49250503fc1bfb6",
        "type": "telegram command",
        "z": "d838f64686718fd4",
        "name": "/Caméras",
        "command": "/camera",
        "description": "Demande snapshot des caméras",
        "registercommand": true,
        "language": "",
        "scope": "default",
        "bot": "f9e88713e8567cb0",
        "strict": false,
        "hasresponse": true,
        "useregex": false,
        "removeregexcommand": false,
        "outputs": 2,
        "x": 100,
        "y": 60,
        "wires": [
            [
                "4b241a302fe345f5"
            ],
            []
        ]
    },
    {
        "id": "4b241a302fe345f5",
        "type": "function",
        "z": "d838f64686718fd4",
        "name": "function 6",
        "func": "var opts = {\n    reply_markup: JSON.stringify({\n        \"inline_keyboard\": [[\n            {\n                \"text\": \"PTZ\",\n                \"callback_data\": \"3\"\n            },\n            {\n                \"text\": \"Cour\",\n                \"callback_data\": \"4\"                \n            },\n            {\n                \"text\": \"Grenier\",\n                \"callback_data\": \"5\"                \n            },\n            {\n                \"text\": \"Atelier\",\n                \"callback_data\": \"6\"                \n            },  \n            {\n                \"text\": \"Obs\",\n                \"callback_data\": \"7\"\n            }                                              \n            ]\n        ]\n    })\n};\n\nmsg.error = false;\n\nmsg.payload.content = 'Selection?';\nmsg.payload.options = opts;\n\nmsg.payload.chatId = xxxxxxxxxxxxxxxxx;\nmsg.payload.type = \"message\";\n\nreturn [msg];",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 60,
        "wires": [
            [
                "28fd3a1fb64bdd67"
            ]
        ]
    },
    {
        "id": "28fd3a1fb64bdd67",
        "type": "telegram sender",
        "z": "d838f64686718fd4",
        "name": "",
        "bot": "f9e88713e8567cb0",
        "haserroroutput": false,
        "outputs": 1,
        "x": 550,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "f9e88713e8567cb0",
        "type": "telegram bot",
        "botname": "alerte",
        "usernames": "Alerte47bot",
        "chatids": "xxxxxxxxxxxx",
        "baseapiurl": "",
        "testenvironment": false,
        "updatemode": "polling",
        "addressfamily": "",
        "pollinterval": "300",
        "usesocks": false,
        "sockshost": "",
        "socksprotocol": "socks5",
        "socksport": "6667",
        "socksusername": "anonymous",
        "sockspassword": "",
        "bothost": "",
        "botpath": "",
        "localbotport": "8443",
        "publicbotport": "8443",
        "privatekey": "",
        "certificate": "",
        "useselfsignedcertificate": false,
        "sslterminated": false,
        "verboselogging": false
    },
    {
        "id": "59781b09.703574",
        "type": "server",
        "name": "Home Assistant",
        "addon": true
    }
]

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.