Open flimo44 opened 6 years ago
Hello,
Quelle version de Node ? le module node-freeboxos nécessite une version 6 minimum je crois.
Bonjour
Node est en version 5. Je vais voir pour passer en 6.
Cdlt Philippe
Visiblement, quelqu'un d'autre me signale que ce n'est pas simple voir pas possible d'upgrader node sur les raspberry avec un armv6...
Bonjour , Update effectué en version 6 . Le problème semble resolu.
Pour faire l'update en node 6 sur RP2 et RPI3 ( RPI1 je n'ai pas testé )
Ajouter le repository nodesource : sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - Cette commande va aussi mettre à jour le catalogue.
NB. Adafuit mets aussi node à disposition sur un repository similaire. Avec nodesource, on a une version plus à jour. NB. Quand la version 8 de NodeJS sera disponible, l'url ci-dessus devra être adaptée. Voir https://github.com/nodejs/LTS/.
Installer nodejs : sudo apt-get install nodejs NB. npm (le gestionnaire de package de node) est installé automatiquement avec nodejs.
Vérification : pi@raspberrypi:~ $ nodejs -v v6.2.1 pi@raspberrypi:~ $ npm -v 3.9.3
Bonjour , Voici l'erreur que j'ai au lancement du script principale :
pi@Pi2:~/freebox-caller-id $ sudo node caller_id.js fs.js:642 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^
Error: ENOENT: no such file or directory, open '/tmp/callerid/freebox.json'
at Error (native)
at Object.fs.openSync (fs.js:642:18)
at Object.fs.readFileSync (fs.js:510:33)
at new Freebox (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:65:22)
at getCalls (/home/pi/freebox-caller-id/caller_id.js:96:17)
at run (/home/pi/freebox-caller-id/caller_id.js:57:3)
at Object.
Ps : J'avais pas vu l'erreur avant lors de l'init d'ou l'erreur ci-dessus. J'ai pourtant bien validé sur l'écran de la freebox "Oui" :(
pi@Pi2:~/freebox-caller-id $ sudo node caller_id.js init error= null app= { app_id: 'callerid', app_name: 'Caller ID', app_version: '0.0.1', device_name: 'Server', app_token: 'xxxxxxxxxxxxxxxxxxxxxxxxfCgR1QRd5rzIoXIf8POngnpSY49ij/YPYY8t/dE', track_id: 3, logged_in: false, challenge: 'YeJCnECFUU7hqLOCIhtyj/Wr4EhbmUxX', password: null, status: 'granted' } fs.js:81 throw new TypeError('Expected options to be either an object or a string, ' + ^
TypeError: Expected options to be either an object or a string, but got function instead at throwOptionsError (fs.js:81:9) at Object.fs.writeFileSync (fs.js:1341:5) at Freebox._saveJSON (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:132:6) at P (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:121:31) at P (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:1569:3) at Freebox.saveJSON (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:121:10) at freebox.waitApplicationGranted (/home/pi/freebox-caller-id/caller_id.js:30:13) at _getAuthorizeStatus (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:487:12) at Request.request [as _callback] (/home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:386:4) at Request.self.callback (/home/pi/freebox-caller-id/node_modules/request/request.js:186:22)
Normalement c'est l'appel à init qui stocke dans le fichier /tmp/callerid/freebox.json les token d'authorisation de se connecter à la box.
Le fichier n'est pas créé lors de l'appel à init ? (on peut refaire un init plusieurs fois)
Corrigé par un autre :
Résolu en remplaçant la ligne 134 ' fs.writeFileSync(path, json, callback); ' par ' fs.writeFileSync(path, json, null, null, null, callback); '
il faut que je fasse la modif de mon côté.
Bonjour,
J'obtiens ce message au lancement du RPI : Une idée?
nov. 02 20:48:38 servtest systemd[1]: Started FreeboxCallerID.
nov. 02 20:48:39 servtest node[1368]: fs.js:663
nov. 02 20:48:39 servtest node[1368]: return binding.open(pathModule.toNamespacedPath(path),
nov. 02 20:48:39 servtest node[1368]: ^
nov. 02 20:48:39 servtest node[1368]: Error: ENOENT: no such file or directory, open '/tmp/callerid/freebox.json'
nov. 02 20:48:39 servtest node[1368]: at Object.fs.openSync (fs.js:663:18)
nov. 02 20:48:39 servtest node[1368]: at Object.fs.readFileSync (fs.js:568:33)
nov. 02 20:48:39 servtest node[1368]: at new Freebox (/opt/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:65:22)
nov. 02 20:48:39 servtest node[1368]: at getCalls (/opt/freebox-caller-id/caller_id.js:96:17)
nov. 02 20:48:39 servtest node[1368]: at run (/opt/freebox-caller-id/caller_id.js:57:3)
nov. 02 20:48:39 servtest node[1368]: at Object.
Bonjour,
oui voir la modif ligne 134 juste au dessus.
merci de me dire si ok. (il faudra refaire init)
Le fonctionnement est bon, seulement au reboot du serveur même message. Un paramètre à ajouter dans le systemd créé peut-être? Est-il possible de raccourcir le délai de l'envoi du sms? Je le reçois environ 1 minute après la fin de l'appel.
Est-ce que par hasard, après le reboot, /tmp aurait été purgé??
l'envoi du sms, c'est juste un appel à l'url https://sms-api.free-mobile.fr/..... donc ça c'est quelques ms. ensuite le temps d'acheminement du sms de chez Free vers le téléphone je suppose que ça doit être variable... moi c'est quasi instantané pour le moment :-/
Tu peux essayer de changer dans le script le chemin du fichier où sont sauvegardé les paramètres de connexion à la box, et mettre un endroit autre que /tmp (remplacer '/tmp/callerid/freebox.json' par un autre endroit, que le script aura le droit de créer.)
bonjour excuser moi, question tres bete, mais dans quel fichier il faut modifier la ligne 134 ? (j'ai l'erreur apres node caller_id.js init) merci
ça doit être dans le module node-freeboxos. je regarde ça tout de suite, je vais faire une nouvelle release. (j'utilise un fork de node-freeboxos, car j'ai du modifier des choses dedans pour le faire marcher)
ça y est, tu peux faire un "npm update" à la racine du répertoire du projet.
relancer init, qui doit maintenant créer le fichier /tmp/callerid/freebox.json
le fichier à modifier est : /home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js
Ligne 132 il me semble.
Sinon ça fonctionne bien pour moi et je reçois le SMS dès la première sonnerie. Donc très réactif :D
merci ! je fais un test ce soir apres le boulo, et je vous fait un retour. je vais pas faire sonner le téléphone maintenant : tout le monde dors ;o))
Effectivement après reboot, les dossiers sont bien présents, mais vides. Je vais modifier le dossier de destination (autre que '/tmp') et vous faire un retour 👍
Peut-être vaut-il mieux que je stocke ça dans le répertoire de l'appli ?
Effectivement je pense que ce serait mieux que le /tmp.
Certains utilisent le /tmp en tmpfs. Donc à chaque reboot le dossier est purgé.
De plus ces données ne devrait pas être temporaire.
Il serait bien de prévoir aussi d'installer "node caller_id.js" comme service.
Je pense comme flimo44 que ce serait préférable de tout stocker dans le même répertoire. Le répertoire /tmp est utilisé par beaucoup de programmes pour leur fichiers "temporaires".
OK.
Vous êtes obligés de les rebooter souvent vos Pi ?
Je reboot rarement mes PI .
ça varie entre 1 mois et 4 mois en moyenne. Principalement après des mises à jours OS ou firmware
Maintenant j'ai ce message après un reboot :
systemd[1]: Started FreeboxCallerID.
node[681]: { Error: Session failed !
node[681]: at Request.request [as _callback] (/opt/freebox-caller-id/node_modules/node-fre
eboxos/lib/freebox.js:671:13)
node[681]: at Request.self.callback (/opt/freebox-caller-id/node_modules/request/request.js:186:22)
node[681]: at emitTwo (events.js:135:13)
node[681]: at Request.emit (events.js:224:7)
node[681]: at Request.
Peu-être parce que je désactive l'option "Permettre les nouvelles demandes d'association" une fois la première effectuée sur freebox OS?
Ensuite, si tu fais un appel de test, ça marche ou pas ?
Lorsque le token de session n'est plus valable, node-freeeboxos en redemande un automatiquement. Donc même si invalid_token s'affiche, normalement ça continue de fonctionner..
Effectivement même avec le message "invalid_token", le script fonctionne! Merci :)
Bonjour,
Je suis avec un RPi 1 et donc un node v4.0.0 qui fonctionne avec l'arm.
Est-ce la bonne version ou je peux l'upgrader ?
Lorsque je lance le script node caller_id.js init, ma Freebox me demande bien le Non/Oui avec les flêches mais j'ai beau changer le DELAY dans le script ou le timeout de la commande init, voilà l'erreur que j'ai à chaque fois :
error= null app= { app_id: 'callerid', app_name: 'Caller ID', app_version: '0.0.1', device_name: 'Server', app_token: 'ygPOXsYlI9o2xaxOBBTv1sGcnM8mOFH8HVXnySzVicTJmHns5I5osuxU0fcISzN/', track_id: 6, logged_in: false, challenge: 'k3Ge0rrp4HgT5ryCnejUnrxFniAQWhJF', password: null, status: 'granted' }
Pourquoi ?
Merci
@titithebad hello, ce n'est pas une erreur en fait, c'est le message renvoyé par Freebox OS pour dire que l'autorisation a été accordée (status: 'granted'). 👍
Merci mais pourquoi alors j'ai cette erreur quand je lance node caller_id.js ? fs.js:549 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^
Error: ENOENT: no such file or directory, open '/tmp/callerid/freebox.json'
at Error (native)
at Object.fs.openSync (fs.js:549:18)
at Object.fs.readFileSync (fs.js:397:15)
at new Freebox (/home/pi/sms_freebox/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:66:22)
at getCalls (/home/pi/sms_freebox/freebox-caller-id/caller_id.js:96:17)
at run (/home/pi/sms_freebox/freebox-caller-id/caller_id.js:57:3)
at Object.
C'est que 'node caller_id.js init' n'a pas écrit le fichier /tmp/callerid/freebox.json. Il n'y a pas un autre message après le init ? Tu réponds bien Oui sur la Freebox ?
Aussi, je ne sais pas à quand remonte ton "git checkout" mais tente un "npm update".
Bonsoir,
Je viens de regarder un peu plus le script. Pourquoi mettre les fichiers dans /tmp ?
Sur les RPi pour économiser la carte SD, il est souvent conseillé de mettre en RAM les répertoires /tmp et /var/log.
Il n'est pas possible de mettre cela ailleurs ?
A chaque reboot du RPi, tous tes fichiers temporaires sont perdus....
Qu'en penses-tu ?
Je vais les mettre dans le répertoire de l'appli.
et surtout je ne vais plus avoir besoin que du fichier freebox.json...
Parfait, c'est beaucoup mieux ainsi car d'autres applis touchent au répertoire /tmp.
Fais moi signe quand c'est fait que je teste. Rallonge aussi peut être les delay d'attente des réponses ?
Quels delais d'attente des réponses ?
Nouvelle version 0.5.0 avec nouveau fichier de conf dans config/default.json
Merci de vos retours. (genre : ça marche ?? :-) )
Attention le format du fichier de conf a un peu changé. Merci de repartir du default.json fourni. (il y a maintenant un élément 'freemobile' qui est un Array json, dans lequel vous pouvez mettre une ou plusieurs confs Free Mobile -- cf la doc sur la page d'accueil)
=> il faut créer un fichier config/local.json en vous inspirant de config/default.json (si vous modifiez directement default.json, les prochains 'git pull' peuvent looser)
Voir la doc de Node Config pour les noms de fichier de conf supportés.
Pour le délais d'attente, tu n'as pas mis un genre de timeout au cas ou ?
Du coup j'ai l'impression que vu les changements, il vaut mieux tout repartir de zéro ?
oui, mais normalement il n'y a que le fichier de conf à modifier, et refaire un init.
Il n'y a pas de délai d'attente. Le script appelle Freebox OS toutes les secondes, et s'il y a un appel en cours, l'appel à l'API d'envoi du SMS est immédiat.
Parfait, par défaut le texte passe au poil sur notification Android :+1: (pas besoin d'ouvrir le SMS)
tu peux maintenant customiser le texte via le fichier de conf, cf la page d'accueil. Ca utilise la syntaxe de http://olado.github.io/doT/index.html
J'ai une erreur quand je lance node caller_id.js :
if (calls.length == 0) return setTimeout(run, DELAY); ^
TypeError: Cannot read property 'length' of undefined
at /home/pi/sms_freebox/freebox-caller-id/caller_id.js:63:14
at /home/pi/sms_freebox/freebox-caller-id/caller_id.js:177:12
at Request._callback (/home/pi/sms_freebox/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:938:4)
at Request.self.callback (/home/pi/sms_freebox/freebox-caller-id/node_modules/request/request.js:186:22)
at emitTwo (events.js:87:13)
at Request.emit (events.js:172:7)
at Request.
Suite à la mise à jour, j'ai tout réinstallé et je suis avec la version node 4.8.6 qui fonctionne sur mon RPi 1. J'ai donc refait également node caller_id.js init et j'ai accepté sur ma freebox.
Hello,
il n'y a que ça comme erreur qui s'affiche ?
je regarde.
Oui que cela.
est-ce que freebox.json a bien été écrit sur le disque, dans le répertoire du projet ?
oui je le vois dans le répertoire du projet et il est pas vide ! Je vois à la fin le granted
c'est un git clone tout nouveau ?
tu peux tenter un "npm update" à la racine ?
Oui pour le git clone. J'ai tout refait.
même résultat suite au npm update.
Lors que je fait le node init, la freebox met du temps à me demander demander l'autorisation... Mais elle me la demande.
sans me le copier coller, il y a un fichier json qui a l'air correct dans freebox.json ?
Oui, il ressemble a ca (j'ai mis toto dans les paramètres : { "app_id": "callerid", "app_name": "Caller ID", "app_version": "0.5.2", "device_name": "Server", "app_token": "toto", "track_id": 9, "logged_in": true, "challenge": "toto", "password": "toto", "status": "granted", "session_token": "toto", "permissions": { "parental": false, "explorer": true, "contacts": true, "downloader": true, "settings": false, "calls": true, "___home": true, "pvr": true, "tv": true }
C'est ici que calls est undefined, je ne comprends pas pourquoi :
https://github.com/jystervinou/freebox-caller-id/blob/master/caller_id.js#L177
pi@Pi2:~/freebox-caller-id $ sudo node caller_id.js init /home/pi/freebox-caller-id/node_modules/node-freeboxos/lib/freebox.js:50 class Freebox extends EventEmitter { ^^^^^
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:387:25) at Object.Module._extensions..js (module.js:422:10) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Module.require (module.js:367:17) at require (internal/module.js:20:19) at Object. (/home/pi/freebox-caller-id/caller_id.js:1:77)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)