SyntaxError: Unexpected token lors de l'écriture

Bonjour à tous,

je viens d’acheter le plugin CamPatrol qui m’a l’air intéréssant.

j’ai installé le plugin et configuré comme suit :
image
J’ai essayé sur le 21 classique, sur le 35 pour eviter un potentiel conflit ; j’ai aussi essayé en indiquant l’adresse IP.

J’ai ensuite configuré une caméra REOLINK RLC-840A :


Le service CamPatrol démarre correctement :

[2025-02-04 08:52:41] INFO  : Server started
[2025-02-04 08:52:41] DEBUG  : Server config port: 35 user: alex
{"name":"ftp-srv","hostname":"AIRPLAY","pid":3365173,"level":30,"protocol":"ftp","ip":"0.0.0.0","port":"35","msg":"Listening","time":"2025-02-04T08:52:41.808Z","v":0}
[2025-02-04 08:52:41] INFO  : CamPatrol server is started```

Mais lorsque le clique sur test sur ma caméra (ou que je fais un mouvement devant) ; voici le log :

[2025-02-04 08:53:46] DEBUG  : Connection successful from 192.168.1.203
[2025-02-04 08:53:46] DEBUG  : FTPSrv chdir CAM1
[2025-02-04 08:53:46] DEBUG  : Get all equipments of camPatrol
[2025-02-04 08:53:46] DEBUG  : Search equipment with IP: 192.168.1.203
[2025-02-04 08:53:46] ERROR  : Error when getting equipement SyntaxError: Unexpected token '<', "<html>
<h"... is not valid JSON
[2025-02-04 08:53:47] INFO  : Received new file /CAM1/POC ALEX_00_20250204095347.jpg from ip=192.168.1.203
[2025-02-04 08:53:47] INFO  : file name formatted is: POC_ALEX_00_20250204095347.jpg
[2025-02-04 08:53:47] DEBUG  : Get all equipments of camPatrol
[2025-02-04 08:53:47] DEBUG  : Search equipment with IP: 192.168.1.203
[2025-02-04 08:53:47] ERROR  : Error when getting equipement SyntaxError: Unexpected token '<', "<html>
<h"... is not valid JSON
{"name":"ftp-srv","hostname":"AIRPLAY","pid":3365173,"id":"9b3d7d3d-5cd6-48a8-8efb-13c20a72fbc6","ip":"192.168.1.203","directive":"STOR","level":50,"err":{"message":"Cannot destructure property 'stream' of 'fsResponse' as it is undefined.","name":"TypeError","stack":"TypeError: Cannot destructure property 'stream' of 'fsResponse' as it is undefined.\n    at /var/www/html/plugins/camPatrol/resources/campatrold/node_modules/ftp-srv/src/commands/registration/stor.js:16:12\n    at tryCatcher (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/util.js:16:23)\n    at Promise._settlePromiseFromHandler (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:547:31)\n    at Promise._settlePromise (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:604:18)\n    at Promise._settlePromise0 (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:649:10)\n    at Promise._settlePromises (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:729:18)\n    at _drainQueueStep (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:93:12)\n    at _drainQueue (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:86:9)\n    at Async._drainQueues (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:102:5)\n    at Async.drainQueues [as _onImmediate] (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:15:14)\n    at process.processImmediate (node:internal/timers:483:21)"},"msg":"Cannot destructure property 'stream' of 'fsResponse' as it is undefined.","time":"2025-02-04T08:53:47.054Z","v":0}```

hier soir, j'ai eu cette erreur :
[2025-02-04 01:18:07] ERROR  : Error when getting equipement SyntaxError: Unexpected token '<', "<html>
<h"... is not valid JSON
{"name":"ftp-srv","hostname":"AIRPLAY","pid":2881713,"id":"67bfe8f0-61ea-409c-a28f-e665b463763d","ip":"192.168.1.203","directive":"STOR","level":50,"err":{"message":"Cannot destructure property 'stream' of 'fsResponse' as it is undefined.","name":"TypeError","stack":"TypeError: Cannot destructure property 'stream' of 'fsResponse' as it is undefined.
at /var/www/html/plugins/camPatrol/resources/campatrold/node_modules/ftp-srv/src/commands/registration/stor.js:16:12
at tryCatcher (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromise0 (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:649:10)
at Promise._settlePromises (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/promise.js:729:18)
at _drainQueueStep (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:93:12)
at _drainQueue (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:102:5)
at Async.drainQueues [as _onImmediate] (/var/www/html/plugins/camPatrol/resources/campatrold/node_modules/bluebird/js/release/async.js:15:14)
at process.processImmediate (node:internal/timers:483:21)"},"msg":"Cannot destructure property 'stream' of 'fsResponse' as it is undefined.","time":"2025-02-04T01:18:07.431Z","v":0}

Tout va bien sur mon jeedom :

Pour analyser le problème, j’ai essayé de me connecter avec WinSCP sur le ftp depuis mon PC ; j’ai les mêmes problèmes :

Error when getting equipement SyntaxError: Unexpected token '<', "<html>

Et lors de la copie d’un fichier, j’ai ce même log :
image

Une idée de ce qui pourrait causer ce problème ?

Merci pour votre aide.
Alexandre

Le plugin se connecte a jeedom pour récupérer la liste des équipements, a priori il ne reçoit pas une réponse au format json, mais au format HTML

Est ce que tu peux:

  1. arrêter le service campatrol,
  2. vider les logs.
  3. Rester en débug
  4. Démarrer le service
  5. Nous donner les logs.

Voici le log :

[2025-02-05 11:05:21] INFO  : Stop le FTP Serveur
[2025-02-05 11:05:23] INFO  : Démarrage du serveur FTP
[2025-02-05 11:05:23] DEBUG  : Commande lancée: node /var/www/html/plugins/camPatrol/resources/campatrold/server.js --port=35 --user=alex --pwd=alex --ip=0.0.0.0 --pluginId=camPatrol --apikey=TDCh0WdH26E3nCziSKqgZcZDzSX4lWsb6uv666HrQEOxCLMI6qRpuisgNDEt0GfR --pidFile=/tmp/jeedom/camPatrol/daemon.pid --logLevel=debug --alertsDir=/var/www/html/plugins/camPatrol/data/alerts
[2025-02-05 11:05:23] INFO  : Démarrage du serveur FTP effectué
node version:
v20.18.2
[2025-02-05 10:05:23] INFO  : Server started
[2025-02-05 10:05:23] DEBUG  : Server config port: 35 user: alex
{"name":"ftp-srv","hostname":"AIRPLAY","pid":489987,"level":30,"protocol":"ftp","ip":"0.0.0.0","port":"35","msg":"Listening","time":"2025-02-05T10:05:23.799Z","v":0}
[2025-02-05 10:05:23] INFO  : CamPatrol server is started

Si je comprend bien :

Ton plugin fait appel à Jeedom via l’API JSON RPC qui interroge Jeedom. Du coup d’après le log debug, l’erreur viendrait de cette fonction ?

function getEquipement(clientIP){
    log.debug("Get all equipments of "+args.pluginId);
    return executeApiCmd(JEEDOM_CALLBACK_URL, {
        "jsonrpc": "2.0",
        "method": "eqLogic::all",
        "params": {
            "apikey": args.apikey,
            "plugin": args.pluginId
        }
    })
    .then((response, reject) =>{
        if (reject === undefined){
            log.debug("Search equipment with IP: "+clientIP);
            var eqFound = undefined;
            var responseParsed = JSON.parse(response);
            if (responseParsed !== undefined && responseParsed.result !== undefined){
                responseParsed.result.forEach(eq => {
                    if (eq.logicalId === clientIP){
                        log.debug("Equipment found! "+JSON.stringify(eq));
                        eqFound =eq;
                    }
                });
                return eqFound;
            }
        }

        log.debug("No equipment found. Response: "+response+" Reject: "+reject);
        return undefined;
    });
}

Ce que je comprend pas c’est pourquoi mon jeedom renvoi une réponse qui serait différente des autres installations ?
Si tu essaye d’intégrer un nouvel équipement chez toi tu as la même erreur ?

Salut,

je n’ai aucune idée de comment résoudre le problème.
As tu une piste ?

Bonjour,
j’ai presque la même config que toi, caméra RLC-820A, j’enregistre les fichiers vidéos et ça fonctionne.
Mes paramètres FTP (port 21):


Capture d’écran 2025-03-11 171253

La seule différence que je vois avec ta config, à part le port, est le paramètre « generate subfolder by ».

Est ce que tu peux aller dans

jeedom/Configuration/« OS/DB/ »/Administration Systeme/Ouvrir

puis dans la zone de texte devant le boutton ok, mettre la ligne:

curl -X POST -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "method": "eqLogic::all", "params": {"apikey": "TDCh0WdH26E3nCziSKqgZcZDzSX4lWsb6uv666HrQEOxCLMI6qRpuisgNDEt0GfR","plugin": "camPatrol" }}' http://127.0.0.1/core/api/jeeApi.php

Puis tu cliques sur ok et tu nous envoies le resultat