[RFLINK network]TypeError: Telnet is not a constructor

Bonjour a tous,
j’ai une install diy sous nas synology et ici je viens d’acquérir un nuc pour avoir quelque chose de plus stable pour faire tourner jeedom mais je fais fasse a un problème avec une toute nouvelle fresh install de l’image jeedom sous une vm proxmox.j ai tenté de deux manières restore mon backup et toute nouvelle install en installant que le plugin pour commencer.deja j’avais le problème avec request donc j ai exécute le npm install dans le dossier ressources mais maintenant je fais fasse a une autre erreur et la je sèche complètement sur la manière de résoudre cela :

TypeError: Telnet is not a constructor
    at launchGateway (/var/www/html/plugins/rflink/resources/rflink.js:148:14)
    at Object.<anonymous> (/var/www/html/plugins/rflink/resources/rflink.js:178:1)
    at Module._compile (node:internal/modules/cjs/loader:1155:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
    at Module.load (node:internal/modules/cjs/loader:1033:32)
    at Function.Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:22:47
Fri Dec 30 2022 21:48:45 GMT+0100 (Central European Standard Time) - Jeedom url : http://127.0.0.1:80/plugins/rflink/core/api/rflink.php?apikey=xxr, gwAddress : network
/var/www/html/plugins/rflink/resources/rflink.js:148
    var gw = new Telnet();
             ^

bon je m’auto répond mais ca servira certainement il faut éditer le fichier rflink.js et remplacer
var Telnet = require(‹ telnet-client ›);
par
var { Telnet } = require(‹ telnet-client ›);
et la le demon démarre
@lunarok si jamais jette un coup d’œil dans la doc pour utiliser telnet-client c’est indique comme cela

2 « J'aime »

bon après avoir pu lancer le demon je fais fasse a une erreur (apparemment liée encore a telnet) avec une tentative de connection sur un rflink en réseau(via putty la connection est ok en telnet)

Citation
Fri Dec 30 2022 23:06:35 GMT+0100 (Central European Standard Time) - connected to network gateway at network:
Fri Dec 30 2022 23:06:37 GMT+0100 (Central European Standard Time) Tentative de reconnexion de la gateway…
Fri Dec 30 2022 23:06:37 GMT+0100 (Central European Standard Time) - An uncaughtException was found, the program will end Error: Cannot connect
at Socket. (/var/www/html/plugins/rflink/resources/node_modules/telnet-client/lib/index.js:130:35)
at Object.onceWrapper (node:events:627:28)
at Socket.emit (node:events:513:28)
at Socket._onTimeout (node:net:550:8)
at listOnTimeout (node:internal/timers:559:17)
at processTimers (node:internal/timers:502:7)
Fri Dec 30 2022 23:06:38 GMT+0100 (Central European Standard Time) - An uncaughtException was found, the program will end Error: listen EADDRINUSE: address already in use :::8020
at Server.setupListenHandle [as _listen2] (node:net:1463:16)
at listenInCluster (node:net:1511:12)
at Server.listen (node:net:1599:7)
at /var/www/html/plugins/rflink/resources/rflink.js:142:14
at FSReqCallback.oncomplete (node:fs:192:23)

j’ai vu qu’il y avait un sujet similaire et qu’aucune solution n’a pu être trouvée donc je tente ma chance ici

bon apparemment le plugin a été écrit pour fonctionner avec certainement une ancienne version de telnet-client et meme nodejs mais pas moyen de savoir laquelle donc il y aurait 2 solutions (réécrire le code avec le nouveau standard ou alors installer les paquets telnet-client & nodejs avec lequel le code est compatible et forcer son utilisation).si jamais tu passes par ici @lunarok et que tu te souviens pour quelles versions ton code a été écrit fait moi signe stp sinon je vais tenter de réécrire le code pour que ca fonctionne…

Il n’y avait pas de dépendance sur une version telnet. Dans le passé serial a posé ce genre de soucis, c’est pour ça qu’il y a une version bloqué.
Du coup il est possible de verrouiller une version précédente.
Le changement doit pas être vieux vu que j’ai pas eu cet écho avant

Non effectivement j’ai forcé l’usage d’une version de telnet pour l’erreur liée au constructeur par contre pour l’erreur socket elle reste présente et j’ai vu sur un autre thread RFLink via réseau que des gens qui ont voulu utiliser le plugin avec un rflink réseau ont le même soucis je pense que c’est lié à une update de net mais sans certitude compliqué d’investiger car dans les log il parle de telnet mais je pense que ça vient d’ailleurs le soucis c’est qu’avec toutes les mise à jour des module node c’est compliqué d’être toujours up to date en tout cas impossible d’utiliser un rflink réseau pour l’instant si je trouve un workaround je le ferais savoir si toi de ton côté tu peux jeter un oeil si tu as du temps ce serait top

bon j’ai un peu investigué mais le je manque vraiment de connaissance et de compétences. dans le fichier /var/www/html/plugins/rflink/resources/node_modules/telnet-client/lib/index.js on voit bien un appel au module net de node ou nodejs(je sais pas trop la différence entre les deux) pour créer la connection sur socket.Le problème c’est que ce n’est pas un module indépendant avec lequel on pourrait spécifier une version mais il est intègre dans node ou nodejs et la je sais pas trop quoi faire j’ai pu downgrade node mais pas moyen sur nodejs et apparement c’est lui qui gère ca donc je suis coincé

alors au final je reviens j’ai trouvé la solution pour le démon + erreur et pour que ca fonctionne en réseau depuis une toute nouvelle installation jeedom (@lunarok a toi de voir si tu veux l’inclure dans un futur update) :
1)

cd /var/www/html/plugins/rflink/resources && sudo npm install

  1. remplacer dans le fichier /var/www/html/plugins/rflink/resources/rflink.js

var Telnet = require(‹ telnet-client ›);

par
var { Telnet } = require('telnet-client');
3) remplacer

var gw = new Telnet();

gw.connect({port: tmp[1], host: tmp[0], irs: '\r\n'});

par

var gw = new Telnet();
const params = {
host: tmp[0],
port: tmp[1],
shellPrompt: null,
timeout: 1500
}
gw.connect(params);

4)et dernière étape pour moi qui a été nécessaire c’est d’éditer le fichier jeedom de fail2ban pour ajouter mon range réseau local 192.168.31* qui par défaut n’est pas inclus.

Voila j’ai pas mal galeré pour que ca fonctionne j’espère que ca en aider d’autre

Je vais l’intégrer en beta et on verra si il y a d’autres retours déjà.
Tu aurais moyen de tester avec la lib serialport en dernière version ? quitte à upgrader les libs, tout faire

Je vais regarder a ça donne moi juste un peu de temps je viens juste de terminer la migration de mon installation vieille de 4 ans qui avait subi des update de jeedom + de debian donc je test encore si tout est stable et fonctionnel et d’ici une à deux semaines je ferai ça en même temps je vais intégrer le module ZigBee de la zigate a la passerelle réseau que j’ai créé avec le rflink +wemos.en tout cas question stabilité j’ai eu aucune déconnexion et tout est très réactif côté rflink même a travers Google home

@lunarok je viens d’aller voir un peu la denière version est la 10.5 et ici chez moi rflink fonctionne sur 9.2.8
alors sans essayer je vois deja que cela ne fonctionnera pas car ils ont changé les structures declaratives et la structure pour passer les arguments aux fonctions

V9:

V10:

juste en comparant les 2 exemples

Il faudra donc aussi réécrire une partie du code pour que cela puisse tourner sur les dernières lib serialport de npm.si j’ai du temps j’y jeterais un oeil mais je t’avoue que la progra ca fait longtemps donc si c’est un peu poussif je vais galérer.

Bonjour,
Je ne m’en sors pas avec RFLink que j’ai payé 5 euros.
Je fouille depuis ce matin. Linux n’est pas ma tasse de thé. DOnc je ne comprends pas tout ce qui est écrit.
Petite question : quelqu’un a-t-il réussi à faire fonction ce plugin sans difficulté ?
Merci.

Oui j’ai réussi à le relancer depuis une toute nouvelle installation jeedom,dis moi quel est le soucis ?

Ma version de Jeedom installée sur un Raspberry 3b : 4.3.11
Firmware RFLink R48
L’installation des dépendances se passent bien.
Le RFLink USB est le bon.
ET voila ce qui se passe .

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.<anonymous> (/var/www/html/plugins/rflink/resources/rflink.js:4:14)
    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)

Tu dois éditer le fichier /var/www/html/plugins/rflink/resources/rflink.js avec l’explorateur de fichiers de jeedom et remplacer les lignes comme indiqué dans les messages plus haut dans le post.ensuite tu sauvegardes le fichier et tu relance le démon

J’essaie demain et reviens te dire.
Merci.

Désolé de ce retour tardif, mais rien n’y fait.
Je reprends l’installation depuis le début.

Bon même problème , tester la version beta , la manip du dessus en mod le fichier rflink.js , pas la mm erreur mais tjs impossible de relancer les dépendances et tjs pas possible de relance le demon ca rend fou , surtout ou j explique pas ca marchais très bien le 30/01 pas fait de maj depuis rien

Wed Feb 01 2023 20:39:32 GMT+0100 (Central European Standard Time) - Jeedom url : http://127.0.0.1:80/plugins/rflink/core/api/rflink.php?apikey=2hkeQbsUinhZ9rs8REOnpyKQRdwIC8pp, gwAddress : /dev/ttyACM0
/var/www/html/plugins/rflink/resources/node_modules/bindings/bindings.js:121
throw e;
^
Error: The module '/var/www/html/plugins/rflink/resources/node_modules/@serialport/bindings/build/Release/bindings.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 93. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1249:18)
at Module.load (node:internal/modules/cjs/loader:1043:32)
at Function.Module._load (node:internal/modules/cjs/loader:878:12)
at Module.require (node:internal/modules/cjs/loader:1067:19)
at require (node:internal/modules/cjs/helpers:103:18)
at bindings (/var/www/html/plugins/rflink/resources/node_modules/bindings/bindings.js:112:48)
at Object. (/var/www/html/plugins/rflink/resources/node_modules/@serialport/bindings/lib/linux.js:2:36)
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) {
code: 'ERR_DLOPEN_FAILED'
}

avec la mod du fichier rflink.js

/var/www/html/plugins/rflink/resources/rflink.js:4
var { Telnet } = require(‹ telnet-client ›);
SyntaxError: Invalid or unexpected token
at Object.compileFunction (node:vm:360:18)
at wrapSafe (node:internal/modules/cjs/loader:1094:15)
at Module._compile (node:internal/modules/cjs/loader:1129:27)
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/cjs/loader:878:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:22:47

souvent des soucis avec rflink sans comprendre pk

Bon sorry j’ai fait une boulette dans le code donné (clavier QWERTY)

C’est

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

qu’il faut mettre dans le fichier /var/www/html/plugins/rflink/resources/rflink.js et pas avec les <>

ca c’est pour les erreurs liées a telnet

pour serialport la dernière version ne fonctionne pas il faut modifier le fichier

/plugins/rflink/resources/node_modules/serialport/package.json

et indiquer

"serialport": "~9.2.0"

a la place de latest

merci du coup pour la syntaxe j avais vu que c était bizarre les balise ><

J’ai tout bien mis comme ton exemple pas le meme probleme mais tjs pas de demon ok

Citation
Wed Feb 01 2023 21:32:22 GMT+0100 (Central European Standard Time) - Jeedom url : http://127.0.0.1:80/plugins/rflink/core/api/rflink.php?apikey=2hkeQbsUinhZ9rs8REOnpyKQRdwIC8pp, gwAddress : /dev/ttyACM0
/var/www/html/plugins/rflink/resources/rflink.js:92
const parser = new parsers.Readline({
^
TypeError: Cannot read properties of undefined (reading ‹ Readline ›)
at launchGateway (/var/www/html/plugins/rflink/resources/rflink.js:92:28)
at Object. (/var/www/html/plugins/rflink/resources/rflink.js:179: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/cjs/loader:878:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:22:47

merci d’avance pour ton aide , ps tout mon linux debian est à jour