jystervinou / freebox-caller-id

Recevez des notifications quand le téléphone fixe de la Freebox sonne (Révolution ou Mini 4k). Ne vous déplacez plus pour rien (appel indésirable, numéro masqué...) ! Notification par SMS Free Mobile (numéro ou nom de l'appelant) ou notification vocale directement via le haut-parleur de la Freebox.
24 stars 8 forks source link

Install Error #1

Open flimo44 opened 6 years ago

flimo44 commented 6 years ago

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)

jystervinou commented 6 years ago

Hello,

Quelle version de Node ? le module node-freeboxos nécessite une version 6 minimum je crois.

flimo44 commented 6 years ago

Bonjour

Node est en version 5. Je vais voir pour passer en 6.

Cdlt Philippe

jystervinou commented 6 years ago

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...

flimo44 commented 6 years ago

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

flimo44 commented 6 years ago

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. (/home/pi/freebox-caller-id/caller_id.js:54:26) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32)

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)

jystervinou commented 6 years ago

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)

jystervinou commented 6 years ago

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é.

alexisrgd commented 6 years ago

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. (/opt/freebox-caller-id/caller_id.js:54:26) nov. 02 20:48:39 servtest node[1368]: at Module._compile (module.js:641:30) nov. 02 20:48:39 servtest node[1368]: at Object.Module._extensions..js (module.js:652:10) nov. 02 20:48:39 servtest node[1368]: at Module.load (module.js:560:32) nov. 02 20:48:39 servtest node[1368]: at tryModuleLoad (module.js:503:12) nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Main process exited, code=exited, status=1/FAILURE nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Unit entered failed state. nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Failed with result 'exit-code'. nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Service hold-off time over, scheduling restart. nov. 02 20:48:39 servtest systemd[1]: Stopped FreeboxCallerID. nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Start request repeated too quickly. nov. 02 20:48:39 servtest systemd[1]: Failed to start FreeboxCallerID. nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Unit entered failed state. nov. 02 20:48:39 servtest systemd[1]: freebox-caller-id.service: Failed with result 'exit-code'.

jystervinou commented 6 years ago

Bonjour,

oui voir la modif ligne 134 juste au dessus.

merci de me dire si ok. (il faudra refaire init)

alexisrgd commented 6 years ago

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.

jystervinou commented 6 years ago

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 :-/

jystervinou commented 6 years ago

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.)

aumgeo commented 6 years ago

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

jystervinou commented 6 years ago

ç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)

jystervinou commented 6 years ago

ç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

flimo44 commented 6 years ago

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

aumgeo commented 6 years ago

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))

alexisrgd commented 6 years ago

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 👍

jystervinou commented 6 years ago

Peut-être vaut-il mieux que je stocke ça dans le répertoire de l'appli ?

flimo44 commented 6 years ago

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.

alexisrgd commented 6 years ago

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".

jystervinou commented 6 years ago

OK.

Vous êtes obligés de les rebooter souvent vos Pi ?

flimo44 commented 6 years ago

Je reboot rarement mes PI .

ça varie entre 1 mois et 4 mois en moyenne. Principalement après des mises à jours OS ou firmware

alexisrgd commented 6 years ago

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. (/opt/freebox-caller-id/node_modules/request/request.js:1163:10) node[681]: at emitOne (events.js:125:13) node[681]: at Request.emit (events.js:221:7) node[681]: at IncomingMessage. (/opt/freebox-caller-id/node_modules/request/request.js:1085:12) node[681]: at Object.onceWrapper (events.js:322:30) node[681]: at emitNone (events.js:120:20) node[681]: serverErrorCode: 'invalid_token', node[681]: response: node[681]: { uid: '90a140346837c1245b68b8723f196019', node[681]: success: false, node[681]: msg: 'Erreur d\'authentification de l\'application', node[681]: result: node[681]: { password_salt: 's80Tqs0TXc43odlnVkBlYfiqm2+P6rmh', node[681]: challenge: 'Hgrj4oGb1xTUzylxbnGQvsfBauPOlOLE' }, node[681]: error_code: 'invalid_token' }, node[681]: statusCode: 403, node[681]: canRetry: true }

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?

jystervinou commented 6 years ago

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..

alexisrgd commented 6 years ago

Effectivement même avec le message "invalid_token", le script fonctionne! Merci :)

titithebad commented 6 years ago

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

jystervinou commented 6 years ago

@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'). 👍

titithebad commented 6 years ago

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. (/home/pi/sms_freebox/freebox-caller-id/caller_id.js:54:26) at Module._compile (module.js:434:26) at Object.Module._extensions..js (module.js:452:10) at Module.load (module.js:355:32)

jystervinou commented 6 years ago

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".

titithebad commented 6 years ago

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 ?

jystervinou commented 6 years ago

Je vais les mettre dans le répertoire de l'appli.

et surtout je ne vais plus avoir besoin que du fichier freebox.json...

titithebad commented 6 years ago

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 ?

jystervinou commented 6 years ago

Quels delais d'attente des réponses ?

jystervinou commented 6 years ago

Nouvelle version 0.5.0 avec nouveau fichier de conf dans config/default.json

Merci de vos retours. (genre : ça marche ?? :-) )

jystervinou commented 6 years ago

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.

titithebad commented 6 years ago

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 ?

jystervinou commented 6 years ago

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.

alexisrgd commented 6 years ago

Parfait, par défaut le texte passe au poil sur notification Android :+1: (pas besoin d'ouvrir le SMS)

jystervinou commented 6 years ago

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

titithebad commented 6 years ago

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. (/home/pi/sms_freebox/freebox-caller-id/node_modules/request/request.js:1163:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/home/pi/sms_freebox/freebox-caller-id/node_modules/request/request.js:1085:12)


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.

jystervinou commented 6 years ago

Hello,

il n'y a que ça comme erreur qui s'affiche ?

je regarde.

titithebad commented 6 years ago

Oui que cela.

jystervinou commented 6 years ago

est-ce que freebox.json a bien été écrit sur le disque, dans le répertoire du projet ?

titithebad commented 6 years ago

oui je le vois dans le répertoire du projet et il est pas vide ! Je vois à la fin le granted

jystervinou commented 6 years ago

c'est un git clone tout nouveau ?

tu peux tenter un "npm update" à la racine ?

titithebad commented 6 years ago

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.

jystervinou commented 6 years ago

sans me le copier coller, il y a un fichier json qui a l'air correct dans freebox.json ?

titithebad commented 6 years ago

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 }

jystervinou commented 6 years ago

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