[RFLINK network]TypeError: Telnet is not a constructor

la on dirait un soucis du port ou ton rflink est connecte .t’es bien sur qu’il sur /dev/ttyACM0 et pas plutot /dev/ttyUSB**

Pour sur c est bien le port la , car dansa liste du choix c est soit 0 ou 1 et sur 1 c est ma clef zwave

Le problème est plutôt ça :

TypeError: Cannot read properties of undefined (reading ‹ Readline ›)

Mais dans quel fichier :frowning: suis assez dégoûter de pas avoir migrer l ensemble de mes volets et thermomètre extérieur sur un autres protocole car faut avoue que rflink est très peu suivie par son créateur…

Merci de ton aide , si ça va pas je reviens en jeedom v3 j avais moins de problème mm si bcp de chose ne sont plus compatible

PS suis en v4 depuis 5 mois tout marchais en v4 avant fin janvier

essaie peut être d’enlever la clé zwave le temps de faire fonctionner le plugin pour être sur je sais que sur mon ancienne install lorsque je connectais un usb tout les numéros changeait

Essayer avec rien de brancher :frowning: tjs mm problème

Toute façon je ne peux pas lancer les dépendances quand je clique rien ne ce passe pas normal non plus ca

essaie de remplacer le serial port dans le fichier
/plugins/rflink/resources/node_modules/serialport/package.json
par ca
« serialport »: « ~9.2.8 »,

et puis tu relance dependances et demon

Pas la même erreur mais mm résultats quand je clique sur dépendance rien ne ce passe , et démon tjs not ok

Thu Feb 02 2023 01:16:03 GMT+0100 (Central European Standard Time) - Jeedom url: node: Internal/modules/cjs/loader: 998 throw err;


 Error: Cannot find module 'serialport

 Require stack: - /var/www/html/plugins/rflink/resources/rflink.js

 at Function.Module._resolveFilename (node:internal/modules/cjs/loader 995:15) at Function.Module. load (node:internal/modules/c1s/loader 841:27) at Module.require (node: internal/modules/c3s/loader: 1067:19)

 at require (node: internal/modules/cjs/helpers:103:18)

 at launchGateway (/var/www/html/plugins/flink/resources/flink.js:88:20) at Object. (/var/www/html/plugins/Iflink/resources/rtlink.js:178:1)

 at Module. compile (node:internal/modules/cjs/loader: 1165:14)

 at Object.Module. extensions.js (node: internal/modules/cjs/loader: 1219:10) at Module.load (node: Internal/modules/cjs/loader: 1043:32) at Function Module._load (node:internal/modules/js /loader:878:12) { code: 'MODULE NOT FOUND

 requireStack: [ /var/www/html/plugins/flink/resources/flink.js' ]

Édit après une restauration sur ma config de y a 10 jours , pire maintenant le dossier plugins/rflink/resources/node_modules existe meme plus :frowning: je vais aller au lit 5h que je suis là dessus )

Édit c est good bon j ai du refaire une installation de serial port ancienne version ça râle dans la console mais ça marche , espérons que ça tiennes + de 3 mois sans que je doivent y mettre les pattes , parce que avec une distribution à jour à chaque fois j ai des soucis avec des plug-ins c est relou au possible .

Merci pour ton aide en attendant

Voici ce que j’ ai fait au final après ma resto

Citation
Tester pour recréer les ressources mais rien dans le dossier

/var/www/html/plugins/rflink/resources && npm rebuild

Donc

d /var/www/html/plugins/rflink/resources && sudo npm install
pour recrée les dossiers manquants

Puis
cd /var/www/html/plugins/rflink/resources && sudo npm install serialport@9.2.8

Et après ça bingo démon ok , sauf voire ci dessous

Donc ça me chagrine d avoir des failles de secu d utiliser des dépendances pas à jour

npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, 
npm WARN old lockfile so supplemental metadata must be fetched from the registry. 
npm WARN old lockfile npm WARN old lockfile This is a one-time fix-up, please be patient... 
npm WARN old lockfile npm WARN deprecated har-validator@5.1.5: this library is no longer supported 
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. 
See https://v8.dev/blog/math-random for details. 
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 added 
101 packages, and audited 102 packages in 26s 23 packages are looking for funding run `npm fund` for details 3 vulnerabilities 
(1 high, 2 critical) To address all issues, run: npm audit fix Run `npm audit` for details.

Content pour toi que ça fonctionne,pour les messages restant ce ne sont que des warning donc c’est pas trop grave c’est juste que tu n’utilises pas les dernières versions des modules si j’ai juste pour de l’usage pour toi en interne pas trop de soucis a avoir

1 « J'aime »

Bonjour, Et moi j’ai toujours ça malgré les corrections que tu préconises dans le fichier rflink.js internal/modules/cjs/loader.js:638
throw err;
^

Error: Cannot find module ‹ telnet-client ›
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object. (/var/www/html/plugins/rflink/resources/rflink.js:6:16)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
``
ET ce qui se passe quand je lance
cd /var/www/html/plugins/rflink/resources && sudo npm

npm WARN npm npm does not support Node.js v10.24.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8, 9.

J’ai essayé de supprimer la version 10 pour la version 9. Mais là mes incompétences arrivent vite. J’ai trouvé des choses avec nvm, mais cela ne fonctionne pas.

Bon alors la commande pour npm c’est en tout premier qu’il faut la lancer des que tu a installé le module rflink depuis le store.ensuite pour telnet regarde que dans le fichier plugins/rflink/resources/node_modules/serialport/package.json

Que a côté de telnet est bien indiqué latest entre les crochet

Ensuite regarde que tu as bien modifié le code de rflink’js comme indiqué plus haut dans le post (j’avais fait une erreur avec les ‹  ›)

Je n’ai pas de fichier package.json dans le dossier plugins/rflink/resources/node_modules/serialport/package.json

J’en ai un dans plugins/rflink/resources/package.json dont le contenu est le suivant

{
  "name": "JeedomRflink",
  "version": "0.0.1",
  "description": "Node to use Rflink with Jeedom",
  "license": "GPL-3.0",
  "repository": "npm/npm",
  "dependencies": {
    "request": "latest",
    "serialport": "~9.2.8",
    "telnet-client": "latest"
  }
}

J’avais bien corrigé le rflink.js
Merci pour le temps que tu m’accordes.

Je te joins mon fichier rflink.js au cas où.

var net = require('net');
var fs = require('fs');
var request = require('request');
//var Telnet = require('telnet-client')

var {Telnet} = require('telnet-client')

var urlJeedom = '';
var gwAddress = '';
var gwNetwork = '';
var log = '';
var type = '';

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

// print process.argv
process.argv.forEach(function(val, index, array) {
  switch ( index ) {
    case 2 : urlJeedom = val; break;
    case 3 : gwAddress = val; break;
    case 4 : gwNetwork = val; break;
    case 5 : log = val; break;
    case 6 : type = val; break;
  }
});

var fs = require('fs');

function saveValue(data) {
  console.log((new Date()) + " - Send Value : " + data.toString() );
  url = urlJeedom + "&messagetype=saveValue&type=rflink";
  request({
    url: url,
    method: 'PUT',
    json: {"data": data.toString()},
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      if (log == 'debug') {console.log((new Date()) + " - Got response Value : " + response.statusCode);}
    }else{
      console.log((new Date()) + " - SaveValue Error : "  + error );
    }
  });
}

function rfReceived(data) {
  if ((data != null) && (data != "")) {
    //LogDate("debug", "-> "  + td.toString() );
    // decoding message
    var datas = data.toString().split(";");
    var type = +datas[0];

    // decision on appropriate response
    switch (type) {
      case '20':
      saveValue(data);
      break;
    }
  }
}

console.log((new Date()) + " - Jeedom url : " + urlJeedom + ", gwAddress : " + gwAddress);

var relaunchGw = false,
attempsGw = 0;
function launchGateway() {
  if (gwNetwork == 'none') {
    //pour la connexion avec Jeedom => Node
    var pathsocket = '/tmp/rflink.sock';
    fs.unlink(pathsocket, function () {
      var server = net.createServer(function(c) {
        console.log((new Date()) + " - Server connected");
        c.on('error', function(e) {
          console.log((new Date()) + " - Error server disconnected");
        });
        c.on('close', function() {
          //console.log((new Date()) + " - Connexion closed");
        });
        c.on('data', function(data) {
          //console.log((new Date()) + " - Response: " + data);
          gw.write(data.toString() + '\n');
        });
      });
      server.listen(8020, function(e) {
        console.log((new Date()) + " - server bound on 8020");
      });
    });

'use strict';
const SerialPort = require('serialport');
const parsers = SerialPort.parsers;

// Use a `\r\n` as a line terminator
const parser = new parsers.Readline({
  delimiter: '\r\n'
});

const gw = new SerialPort(gwAddress, {
  baudRate: 57600
});

gw.pipe(parser);

gw.on('open', () => console.log('Port open'));
gw.on('end', () => console.log('Port closed'));
gw.on('error', function(err) {
  if (attempsGw < 5 && relaunchGw) {
    console.log((new Date()) + ' Tentative de reconnexion de la gateway...');
    setTimeout(function() {
      gw.close();
      attempsGw++;
      launchGateway();
    }, 5000);
  } else if (attempsGw >= 5) {
    console.log((new Date()) + ' 5 tentatives de connexion à la gateway ('+gwAddress+') ont échouées...');
    gw.close();
  } else {
    console.log((new Date()) + ' Error gateway: ' + err.toString() + ' ' + err.stack);
  }
});

parser.on('data', function(rd) {
  if (log == 'debug') {console.log((new Date()) + " - "  + rd)};
  saveValue(rd);
});

  } else {
    //pour la connexion avec Jeedom => Node
    var pathsocket = '/tmp/rflink.sock';
    fs.unlink(pathsocket, function () {
      var server = net.createServer(function(c) {
        console.log((new Date()) + " - Server connected");
        c.on('error', function(e) {
          console.log((new Date()) + " - Error server disconnected");
        });
        c.on('close', function() {
          //console.log((new Date()) + " - Connexion closed");
        });
        c.on('data', function(data) {
          //console.log((new Date()) + " - Response: " + data);
          gw.send(data.toString());
        });
      });
      server.listen(8020, function(e) {
        console.log((new Date()) + " - server bound on 8020");
      });
    });

    var tmp = gwNetwork.split(':');
    //*****************************************************************
  //  var gw = new Telnet();

    //gw.connect({port: tmp[1], host: tmp[0], irs: '\r\n'});
    
    var gw = new Telnet();
	const params = {
	host: tmp[0],
	port: tmp[1],
	shellPrompt: null,
	timeout: 1500
	}
	gw.connect(params);
    //****************************************************************
    
    gw.on('connect', function() {
      console.log((new Date()) + " - connected to network gateway at " + gwAddress + ":" + type);
      relaunchGw = true;
      attemptsGw = 0;
    }).on('data', function(rd) {
      if (log == 'debug') {console.log((new Date()) + " - "  + rd)};
      saveValue(rd);
    }).on('end', function() {
      console.log((new Date()) + " - disconnected from network gateway");
    }).on('error', function(err) {
      if (attempsGw < 5 && relaunchGw) {
        console.log((new Date()) + ' Tentative de reconnexion de la gateway...');
        setTimeout(function() {
          gw.destroy();
          attempsGw++;
          launchGateway();
        }, 1000);
      } else if (attempsGw >= 5) {
        console.log((new Date()) + ' 5 tentatives de connexion à la gateway ('+gwAddress+') ont échouées...');
        gw.destroy();
      } else {
        console.log((new Date()) + ' Error gateway: ' + err.toString());
        console.log(err.stack);
      }
    });
  }
}
launchGateway();

process.on('uncaughtException', function ( err ) {
  console.log((new Date()) + ' - An uncaughtException was found, the program will end' + ' ' + err.stack);
});

Bizarre normalement c’est bon ,clic sur installation des dépendances et ensuite démarrage du démon pour qu’il relance avec le fichier modifié

J’ai fait tout ça, vérifié le port com, réinstallé un jeedom propre avec uniquement le plugin Rflink, appliqué ta procèdure ,bien vérifié le port com et rien n’y fait.
Je me dis que je dois être une sacré quiche :thinking:

Regarde dans ta déclaration

var {Telnet} = require(‹ telnet-client ›)

Il faut un espace avant et après le premier Telnet==> { Telnet }

Test ça vient de la

@ arnoakavdb
Merci, j’ai fait les 2 modif du fichier rflink.js (points 2 et 3) et j’ai désactivé fail2ban et ca marche !!! je n’ai pas du faire l’étape 1 (sudo npm install)

je viens de bricoler un Sonoff RF Bridge v2 (hardware modification) sur lequel j’ai installe le firmware RFLINK32 customisé pour le Sonoff RF Brdige. j’ai activé le SER2NET sur Sonoff, et le plugin RFLINK modifié comme tu l’as expliqué reconnait bien le SonoFF RF bridge en réseau , mes equipements remontent

est ce que la version beta du plugin RFLINK incorpore ces modifications ? je vois que le fil de discussion a deja plus d’un an et la version stable ne les incorporerait toujours pas ? ou je me trompe ?