août 13

Après avoir découvert NodeRed, je me suis essayé à quelques petits tests avec ma Freebox pour visualiser (pour l’instant uniquement dans le debug de nodered) un appel manqué. Voici le code :
[code]
[{”id”:”ba386057.845d3″,”type”:”mqtt-broker”,”broker”:”localhost”,”port”:”1883″},{”id”:”9c3da036.63c26″,”type”:”inject”,”name”:”Every minute”,”topic”:”",”payload”:”",”payloadType”:”date”,”repeat”:”60″,”crontab”:”",”once”:true,”x”:91,”y”:693,”z”:”ca1c08b.f35e3f8″,”wires”:[[”115c3290.eea3cd”]]},{”id”:”21a282c3.de5d7e”,”type”:”http request”,”name”:”FBX list calls”,”method”:”GET”,”url”:”http://mafreebox.freebox.fr/api/v3/call/log/”,”x”:572,”y”:693,”z”:”ca1c08b.f35e3f8″,”wires”:[[”71994ed2.8e66b”]]},{”id”:”fa122b16.05edd8″,”type”:”http request”,”name”:”register as FBX app request”,”method”:”POST”,”url”:”http://mafreebox.freebox.fr/api/v3/login/authorize/”,”x”:425,”y”:179,”z”:”ca1c08b.f35e3f8″,”wires”:[[”fdad563e.0252a8″]]},{”id”:”fb076d40.04f89″,”type”:”function”,”name”:”process FBX challenge”,”func”:”var app_token = context.global.fbx_app_token\n\nvar text = msg.payload.result.challenge;\nvar key = app_token;\nvar algorithm = ’sha1′;\nvar hash, hmac;\n\nhmac = context.global.crypto.createHmac(algorithm, key);\n\n// change to ‘binary’ if you want a binary digest\nhmac.setEncoding(’hex’);\n\n// write in the text that you want the hmac digest for\nhmac.write(text);\n\n// you can’t read from the stream until you call end()\nhmac.end();\n\n// read out hmac digest\nhash = hmac.read(); \n\nvar newMsg = {payload: {’app_id’:'fr.freebox.node’, ‘password’:hash}};\nreturn newMsg;”,”outputs”:1,”x”:920,”y”:546,”z”:”ca1c08b.f35e3f8″,”wires”:[[”bb518ba4.44ae78″]]},{”id”:”5460e78e.ab9f18″,”type”:”function”,”name”:”Build FBX register app payload”,”func”:”msg.payload = {\n \”app_id\”: \”fr.freebox.node\”,\n \”app_name\”: \”Freebox node\”,\n \”app_version\”: \”0.0.1\”,\n \”device_name\”: \”NodeRed Raspi Server\”\n}\nreturn msg;”,”outputs”:1,”x”:265,”y”:227,”z”:”ca1c08b.f35e3f8″,”wires”:[[”fa122b16.05edd8″]]},{”id”:”6b24c3ad.94db3c”,”type”:”inject”,”name”:”Register FBX app”,”topic”:”",”payload”:”",”payloadType”:”date”,”repeat”:”",”crontab”:”",”once”:false,”x”:120,”y”:174,”z”:”ca1c08b.f35e3f8″,”wires”:[[”5460e78e.ab9f18″]]},{”id”:”d2a49edb.2d5b6″,”type”:”function”,”name”:”Handle FBX app registration”,”func”:”var token = msg.payload.result.app_token;\nvar track_id = msg.payload.result.track_id;\n\nvar newMsg1 = { payload: {’track_id’: track_id, ‘app_token’: token}};\nvar newMsg2 = { payload: {’track_id’: track_id}, \”url\”: \”http://mafreebox.freebox.fr/api/v3/login/authorize/\”+track_id};\nreturn [newMsg1, newMsg2];\n”,”outputs”:”2″,”x”:702,”y”:177,”z”:”ca1c08b.f35e3f8″,”wires”:[[”7d297e32.82d68″],[”6981c0b7.967e4″]]},{”id”:”6a03c634.95fc38″,”type”:”inject”,”name”:”TEST: emulate FBX resp”,”topic”:”",”payload”:”{\”success\”:true,\”result\”:{\”app_token\”:\”gP1sh0M7SsKDyXZipuktIXU1uU1W\\/wTCUTq9JJRk4bO4wsS3X4EY9xkK5XRGIz\\/J\”,\”track_id\”:1}}”,”payloadType”:”string”,”repeat”:”",”crontab”:”",”once”:false,”x”:136,”y”:304,”z”:”ca1c08b.f35e3f8″,”wires”:[[”fdad563e.0252a8″]]},{”id”:”fdad563e.0252a8″,”type”:”json”,”name”:”",”x”:548,”y”:225,”z”:”ca1c08b.f35e3f8″,”wires”:[[”d2a49edb.2d5b6″]]},{”id”:”29f6c093.d6094″,”type”:”comment”,”name”:”TODO”,”info”:”Construction dynamique de l’URL d’api de la FBX selon la doc de l’API”,”x”:77,”y”:72,”z”:”ca1c08b.f35e3f8″,”wires”:[]},{”id”:”736aa740.8c9558″,”type”:”function”,”name”:”Load FBX credential “,”func”:”context.global.fbx_app_token = msg.payload.app_token;\ncontext.global.fbx_app_id = msg.payload.track_id;\n\nreturn msg;”,”outputs”:1,”x”:341,”y”:551,”z”:”ca1c08b.f35e3f8″,”wires”:[[”1915c02e.e6ea4″]]},{”id”:”1915c02e.e6ea4″,”type”:”delay”,”name”:”",”pauseType”:”delay”,”timeout”:”4″,”timeoutUnits”:”seconds”,”rate”:”1″,”rateUnits”:”second”,”randomFirst”:”1″,”randomLast”:”5″,”randomUnits”:”seconds”,”drop”:false,”x”:518,”y”:551,”z”:”ca1c08b.f35e3f8″,”wires”:[[”6301246f.9cfedc”]]},{”id”:”6981c0b7.967e4″,”type”:”http request”,”name”:”Get app status”,”method”:”GET”,”url”:”",”x”:830,”y”:235,”z”:”ca1c08b.f35e3f8″,”wires”:[[”b1e9cc85.4e163″]]},{”id”:”c7df6777.382098″,”type”:”function”,”name”:”Check app status”,”func”:”context.count = context.count || 0; \ncontext.count += 1;\n\nvar status = false;\nif (msg.payload.result.status == ‘granted’) {\n\tstatus = true;\n}\n\nvar newMsg = {payload: status, ‘track_id’: msg.track_id, ‘url’ : msg.url};\n\nif (status == false){\n if (context.count >= 20) {\n \treturn [null, null];\n }\n return [null, newMsg];\n}\nreturn [newMsg, null];”,”outputs”:”2″,”x”:1035,”y”:236,”z”:”ca1c08b.f35e3f8″,”wires”:[[”47be3f58.b841c”],[”ec0c4cf1.13f3b”]]},{”id”:”b1e9cc85.4e163″,”type”:”json”,”name”:”",”x”:922,”y”:174,”z”:”ca1c08b.f35e3f8″,”wires”:[[”c7df6777.382098″]]},{”id”:”47be3f58.b841c”,”type”:”mqtt out”,”name”:”FBX app registration”,”topic”:”/freebox/app_registered”,”broker”:”ba386057.845d3″,”x”:1283,”y”:229,”z”:”ca1c08b.f35e3f8″,”wires”:[]},{”id”:”d5fb8149.2a048″,”type”:”debug”,”name”:”",”active”:false,”console”:false,”complete”:false,”x”:1288,”y”:487,”z”:”ca1c08b.f35e3f8″,”wires”:[]},{”id”:”ec0c4cf1.13f3b”,”type”:”delay”,”name”:”",”pauseType”:”delay”,”timeout”:”15″,”timeoutUnits”:”seconds”,”rate”:”1″,”rateUnits”:”second”,”randomFirst”:”1″,”randomLast”:”5″,”randomUnits”:”seconds”,”drop”:false,”x”:893,”y”:342,”z”:”ca1c08b.f35e3f8″,”wires”:[[”6981c0b7.967e4″]]},{”id”:”7d297e32.82d68″,”type”:”file”,”name”:”FBX credential write”,”filename”:”FBX_credential.json”,”appendNewline”:true,”overwriteFile”:true,”x”:937,”y”:132,”z”:”ca1c08b.f35e3f8″,”wires”:[]},{”id”:”d21d17bf.2de2e8″,”type”:”mqtt in”,”name”:”FBX app registration”,”topic”:”/freebox/app_registered”,”broker”:”ba386057.845d3″,”x”:110,”y”:485,”z”:”ca1c08b.f35e3f8″,”wires”:[[”cae27487.351d88″]]},{”id”:”cae27487.351d88″,”type”:”file in”,”name”:”FBX credential read”,”filename”:”FBX_credential.json”,”format”:”utf8″,”x”:327,”y”:485,”z”:”ca1c08b.f35e3f8″,”wires”:[[”c837c8c4.37c838″]]},{”id”:”c837c8c4.37c838″,”type”:”json”,”name”:”",”x”:504,”y”:485,”z”:”ca1c08b.f35e3f8″,”wires”:[[”736aa740.8c9558″]]},{”id”:”5668da1f.a99724″,”type”:”tail”,”name”:”FBX credential read”,”split”:false,”filename”:”FBX_credential.json”,”x”:112,”y”:428,”z”:”ca1c08b.f35e3f8″,”wires”:[[”c837c8c4.37c838″]]},{”id”:”6301246f.9cfedc”,”type”:”http request”,”name”:”FBX get challenge”,”method”:”GET”,”url”:”http://mafreebox.freebox.fr/api/v3/login/”,”x”:685,”y”:551,”z”:”ca1c08b.f35e3f8″,”wires”:[[”f617db7f.09e828″]]},{”id”:”f617db7f.09e828″,”type”:”json”,”name”:”",”x”:788,”y”:496,”z”:”ca1c08b.f35e3f8″,”wires”:[[”fb076d40.04f89″]]},{”id”:”bb518ba4.44ae78″,”type”:”http request”,”name”:”FBX get session”,”method”:”POST”,”url”:”http://mafreebox.freebox.fr/api/v3/login/session/”,”x”:1044,”y”:493,”z”:”ca1c08b.f35e3f8″,”wires”:[[”27d1bdde.d82e42″]]},{”id”:”ef3caff.f10c35″,”type”:”function”,”name”:”FBX Save session token”,”func”:”if (msg.payload.success) {\n context.global.fbx_session_token = msg.payload.result.session_token;\n return null; \n} else {\n return msg;\n}\n”,”outputs”:1,”x”:940,”y”:613,”z”:”ca1c08b.f35e3f8″,”wires”:[[”1f516669.e0ae9a”]]},{”id”:”27d1bdde.d82e42″,”type”:”json”,”name”:”",”x”:1163,”y”:549,”z”:”ca1c08b.f35e3f8″,”wires”:[[”ef3caff.f10c35″,”d5fb8149.2a048″]]},{”id”:”115c3290.eea3cd”,”type”:”function”,”name”:”FBX api build authenticated header”,”func”:”var newMsg = {payload:'’, headers:{’X-Fbx-App-Auth’:context.global.fbx_session_token}};\nreturn newMsg;”,”outputs”:1,”x”:328,”y”:693,”z”:”ca1c08b.f35e3f8″,”wires”:[[”21a282c3.de5d7e”]]},{”id”:”67ac6d79.985394″,”type”:”comment”,”name”:”Get calls list”,”info”:”",”x”:90,”y”:637,”z”:”ca1c08b.f35e3f8″,”wires”:[]},{”id”:”1f516669.e0ae9a”,”type”:”delay”,”name”:”",”pauseType”:”delay”,”timeout”:”2″,”timeoutUnits”:”seconds”,”rate”:”1″,”rateUnits”:”second”,”randomFirst”:”1″,”randomLast”:”5″,”randomUnits”:”seconds”,”drop”:false,”x”:1153,”y”:613,”z”:”ca1c08b.f35e3f8″,”wires”:[[”fb076d40.04f89″]]},{”id”:”71994ed2.8e66b”,”type”:”json”,”name”:”",”x”:726,”y”:693,”z”:”ca1c08b.f35e3f8″,”wires”:[[”82b4ade7.7d4b5″]]},{”id”:”82b4ade7.7d4b5″,”type”:”function”,”name”:”FBX call : new call ?”,”func”:”var calls = msg.payload.result;\n\nfor (var i=0; i [/code]

written by Mathias

fév 20

Ma télé n’étant pas un modèle très récent (comprendre écran cathodique de presque 10 ans), elle ne bénéficie pas de technos comme HDMI CEC (à vérifier) qui permettent de mettre en veille automatiquement plusieurs appareils en même temps.
C’est moche…
Or ma télé est connectée au Freebox Player et à un petit lecteur DVD (via la péritel) qui permet d’avoir un son acceptable. Le but est donc de trouver un moyen d’allumer et d’éteindre ces 3 appareils avec le moins d’actions possibles. Après quelques tests via le port USB du Freebox Player et un petit paramétrage de la gestion de l’énergie, il est possible d’obtenir les 5V du connecteur USB lorsque le player est allumé (et uniquement à ce moment là). Donc plusieurs solutions envisageables :
- utilisation d’un/deux relais pour alimenter la TV et le lecteur DVD directement pilotés par l’alim USB
- utilisation d’un ATtiny (ou autre) pour gérer en plus des relais, l’envoi du code IR qui va bien pour basculer le lecteur DVD en mode Péritel
- utilisation d’un ATtiny pour gérer les relais, diffuser un signal IR pour le lecteur DVD et une implémentation software USB HID pour émuler une navigation dans le menu du Freebox Player pour lancer automatiquement la TV ou autre (l’idée étant de lancer cette séquence d’émulation d’appuis sur les touches du clavier après la phase d’énumération…)
- utilisation d’un ATtiny (si toujours suffisant) pour gérer les relais, diffuser un signal IR pour le lecteur DVD, émuler des appuis claviers pour automatiser la navigation dans le Freebox Player et envoyer un signal (433MHz ?) qui pourrait servir à éteindre la chaine HiFi si elle est en fonctionnement (dans la même pièce, mais à l’opposé), cette opération nécessiterait une intervention dans la chaine : intégration d’un module de réception 433Mhz et d’un ATtiny, idéalement alimentés uniquement lorsque la chaine n’est pas en veille, et qui émuleraient (via un transistor) un appui sur le bouton de veille lors de la réception du signal paramétré…

Une très grosse source d’informations sur le sujet : http://nathan.chantrell.net/20121014/tinypcremote-an-attiny85-based-infrared-pc-remote-control/

1. Récupérer via Arduino le signal IR émis par la télécommande pour basculer le lecteur DVD en mode péritel (via https://github.com/nathanchantrell/TinyPCRemote/tree/master/TinyPCRemote_CodeReader)
–> Code for this button: 3225320451

2. Test de la reconnaissance par le Freebox Player du périphérique HID keyboard implémenté sur l’arduino en utilisant vusb for arduino et le sketch suivant :

#include “UsbKeyboard.h”

// IR sensor connected to PB4 = ATtiny85 physical pin 3
#define IRpin_PIN PIND
#define IRpin 0

#define MAXPULSE 5000 // max IR pulse length, default 5 milliseconds
#define NUMPULSES 100 // max IR pulse pairs to sample
#define RESOLUTION 2 // time between IR measurements

uint16_t pulses[NUMPULSES][2]; // pair is high and low pulse
uint8_t currentpulse = 0; // index for pulses we’re storing
void setup() {
pinMode(0, INPUT);
}

void loop() {
//UsbKeyboard.update();
unsigned long irCode=listenForIR(); // Wait for an IR Code

// Process the pulses to get our code
for (int i = 0; i < 32; i++) {
irCode=irCode<<1;
if((pulses[i][0] * RESOLUTION)>0&&(pulses[i][0] * RESOLUTION)<500) {
irCode|=0;
} else {
irCode|=1;
}
}

// —————————————————————————————
// Enter IR codes and keystrokes to send below, see keyboard_commands.txt for list of keys
// —————————————————————————————

if (irCode==3225320451) { // Single character example, “1″
UsbKeyboard.sendKeyStroke(KEY_ENTER);
irCode = 0;
for (int i = 0; i < NUMPULSES; i++) {
pulses[i][0] = 0;
pulses[i][1] = 0;
}
// delay(2000);
}

} // loop end

// IR receive code
int listenForIR() {
currentpulse = 0;
while (1) {
unsigned int highpulse, lowpulse; // temporary storage timing
highpulse = lowpulse = 0; // start out with no pulse length

while (IRpin_PIN & _BV(IRpin)) { // got a high pulse
UsbKeyboard.update(); // needs to be called often
highpulse++;
delayMicroseconds(RESOLUTION);
if (((highpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
return currentpulse;
}
}
pulses[currentpulse][0] = highpulse;

while (! (IRpin_PIN & _BV(IRpin))) { // got a low pulse
UsbKeyboard.update(); // needs to be called often
lowpulse++;
delayMicroseconds(RESOLUTION);
if (((lowpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
return currentpulse;
}
}
pulses[currentpulse][1] = lowpulse;
currentpulse++;
}
}

Ayant eu des soucis il y a quelques années lorsque j’avais testé VUSB avec différentes versions de noyaux linux, je m’attendais à beaucoup tatonner… Que nenni : la reconnaissance en tant que HID se fait parfaitement (aux mauvais contacts de la breadboard près…) et le petit sketch permet de m’assurer que tout fonctionne correctement sur des ordi et sur le FBx Player. Je suis parti, pour ce sketch de test, du TinyPCRemote_ATtiny85 de Nathan Chantrell, que j’ai du modifier un peu (reset de pulses[][]), faute de quoi, sur un ordi et le FBx Player, après un seul appui sur la télécommande, le caractère “RETURN” était envoyé de multiple fois.

Donc pour le moment je suis capable :
- de savoir quel code IR envoyer au lecteur DVD pour commuter en péritel
- d’envoyer des codes de touche clavier au Freebox Player pour naviguer dans les menus

A suivre…

written by Mathias

juin 13

Encore une idée de bricolage à réaliser : un atelier portable.

Les idées:

  • embarque oscillo, alim régulée
  • monté sur une base sur roulettes pour le déplacement (verrouillables pour travailler)
  • embarque un “vieux” PC (cf portable Toshiba sous Linux) avec ports USB / serie / parallele [liaison réseau wifi ou mieux : CPL, clavier/souris déportés], écran plan horizontal sous le plan de travail transparent –> Prévoir des rallonges pour déporter les sorties du PC afin qu’elles soient accessible depuis le plan de travail lorsque l’écran est visible.
  • 1 connectique électrique pour l’atelier avec multi pour alimenter tous les appareils
  • rangements pour instruments, composants…
  • lampes LEDs (articulées ?) ou au moins source lumineuse amovible et orientable
  • plan de travail amovible (cf repose clavier PC ou encore principe table de cuisine appart Paris)
  • surface de travail : verre ou plexis qui permet de voir les instruments dessous (avec éclairage a LEDs par dessous à intensité réglable)
  • Lorsque tout est refermé, place minimale (doit tenir sous un bureau normal, comme un caisson) et ne doit pas être [trop] sensible à l’environnement (hermétique aux copeaux de bois, etc…)

L’idée d’origine pour l’oscillo : plaque soutenant l’oscillo qui remonte lorsqu’on bascule le plan supérieur pour servir de plan de travail… Super principe mais pas évident à réaliser… De plus pour conserver le principe de l’écran plat + suerface transparente, il faut implanter tout ça dans ce plan de travail.

written by Mathias

jan 05

Suite à mes tests avec les AVR d’ATMEL et l’implémentation logicielle USB, j’ai testé l’interface avec la plateforme hardware via un script python s’appuyant sur le module python usbtiny fourni avec l’implémentation logicielle USB.

Un problème qui me bloque actuellement est l’utilisation de cette interface de communication sous Mac OS X.

J’ai installé la libusb (téléchargée depuis un projet développé pour utiliser des scanners sous Mac OS X). Les fichiers installés semblent se trouver dans  /usr/local/lib, /usr/local/include. Dans la version linux, le wrapper utilisé pour communiquer entre le module python et la libusb avait été généré automatiquement par Swig. Le fichier libusb.py généré contient la ligne “import _libusb” qui doit faire référence au fichier _libusb.so dont le type ne correspond pas à une librairie sous Mac OS X :

ImportError: dlopen(./_libusb.so, 2): no suitable image found.  Did find:
./_libusb.so: unknown file type, first eight bytes: 0×7F 0×45 0×4C 0×46

Une piste qui explique comment générer un wrapper avec Swig sous Mac OS X (et les différences avec la génération du wrapper sous Linux).

Suite au prochain épisode…

written by Mathias

déc 03
  1. Identifier les tâches chronophages
  2. Associer à chaque tâche une liste de solutions
  3. A chaque solution sont associés:
  • les besoins (métier)
  • les contraintes (techniques)
  • les bénéfices supplémentaires (directs / indirects = solution fille)
  • les moyens à mettre en oeuvre
  • les points positifs/négatifs

    Exemple:

    • Tâche: changement d’environnement local distant

    Solution 1: rendre le changement d’env transparent

    • Accéder depuis le réseau interne à la même adresse que depuis l’extérieur
    • Conf réseau du Cisco à adapter
    • Mise en place d’un proxy pour rediriger correctement en intern les requetes d’acces à l’adresse externe

    Solution 2: automatiser le changement d’env (réduire le nombre d’opérations à effectuer)

    • Script automatisant le changement d’environnement (automatiser le switch –relocate)

    written by Mathias

    nov 20

    Les cookies c’est le mal mais des fois ça peut sauver la vie… ou presque :)
    Sur certains sites, les champs login et password sont pré-remplis (j’imagine grace aux données récupérées dans des cookies)… On perd donc l’habitude de taper ce password et le jour où on change de machine… impossible de s’en souvenir.
    Le code javascript suivant permet de révéler le password affiché en toutes lettres à la place des gros points noirs.


    var allElements = document.getElementsByTagName("*");
    for (var i = 0; (element = allElements[i]) != null; i++) {
    if ("password" == element.type){
    $('PASSWD').type="text"
    }
    }

    written by Mathias

    août 25

    Quelques idées de trucs sympas (et complètement inutiles) qui peuvent donner un joli bureau sous Linux/Ubuntu :

    • AWN avant-window-navigator Barre de lancement animée (cf Dock de Mac OS)
    • Compiz on ne le présente plus / Fusion 3D
    • Plymouth qui donne un rendu graphique pendant le boot (ou grub-gfx …)
    • gDesklets à retester pour voir si c’est plus stable qu’à l’époque de mes premiers tests…
    • adesklets / screenlets
    • Conky A interfacer avec des scripts sur un serveur pour monitorer l’etat des disques… (cf ici) avec une connection ssh sans password au serveur + qq scripts pour récupérer les principales infos pour pouvoir les afficher sur mon poste (ou à défaut, un truc du style Eterm -O0xqC –buttonbar 0 –scrollbar 0 –no-cursor -f green –exec ssh login@serveur “/usr/bin/tail -f /var/log/syslog”)
    • GKrellM (a l’air moins configurable niveau visu… à tester)
    • Tilda

    Dans les autres trucs à installer/tester :

    • Dropbox pour partager les fichiers entre Mac Linux & Windows
    • gnome-do

    Ca peut toujours etre utile :

    Une distrib à tester : ELive (Debian + e17)

    written by Mathias

    août 20

    Juste une idée d’un petit projet qui pourrait prendre quelques soirs dans la semaine (ou plus si affinité) : à la suite de la lecture d’un article sur l’organisation de la fuite d’informations depuis un poste distant dans le MISC n°44 de cet été (juillet/aout 2009), je me dis que pour tester, il pourrait être intéressant d’utiliser une broche d’un AVR typiquement reliée à une led pour lui permettre de communiquer avec le monde qui l’entoure. En résumé utiliser les 2 états (éteint/allumé) et/ou le temps d’allumage (…) pour transmettre des bits à l’environnement extérieur.

    Cette petite expérience ne nécessite pas beaucoup de matos (voire même aucune modification matériel sur du matos existant) mais nécessite néanmoins quelques tests pratiques pour définir des valeurs correctes.

    L’autre partie intéressante de cette expérience serait d’utiliser un capteur (iSight, photodiode/photorésistance voire pourquoi pas LED…) pour pouvoir décoder en temps réel les informations transmises par le montage.

    Ce principe serait/devrait aussi être applicable en utilisant le son comme media de communication…

    Le dévéloppement d’une petite bibliothèque AVR et de petits utilitaires côté hôte pourrait être très pédagogique.

    written by Mathias

    oct 23

    Après quelques rapides recherches sur Google, il s’avère que certains ubunteros ont fait fonctionner ce lecteur d’empreintes digitales sur des configurations matérielles proches de la mienne. Donc pourquoi pas moi ? :)

    Le site de référence.

    1. Téléchargement des sources de libfprint et tentative de configuration…
    2. Manque libcrypto
    3. Pas de réponse de yum à ce sujet
    4. Installation d’un nouveau repository :
    5. Finalement pas mieux, mais un doute s’empare de moi :
      • [mathias@localhost libfprint-0.0.6]$ ls /lib/libcrypt*
        /lib/libcrypt-2.5.so      /lib/libcrypto.so.6
        /lib/libcrypto.so.0.9.8b  /lib/libcrypt.so.1
    6. "you might have missed to install the -dev or -devel package (like
      libssl-dev) which provides the pkg-config file (ie
      /usr/lib/pkgconfig/libcrypto.pc and the like)."
    7. sudo yum install openssl-devel
    8. pkg-config –exists –print-errors openssl; echo $? –> 0  \o/
    9. sudo yum install ImageMagick-devel
    10. ./configure
    11. make
    12. sudo make install
    13. Téléchargement de fprint-demo
    14. ./configure && make && sudo make install
    15. Téléchargement pam_fprint
    16. ./configure && make && sudo make install
    17. pam_fprint_enroll –enroll-finger 7
    18. sudo vim /etc/pam.d/system-auth
      • auth        required      pam_env.so
        > auth       sufficient   pam_fprint.so
        > auth       sufficient   pam_fprint.so
        > auth       sufficient   pam_fprint.so
      • 3 tentatives de fingerprint successives au cas où la première ne suffirait pas
    19. Test…. OK \o/

      written by Mathias

    sept 30

    Pour éviter de partir dans plein de projets différents sans jamais rien finir, je me dis que le concept de “Projet de la semaine” pourrait être simpa : énoncé du projet le lundi soir, étude, implémentation/prototype dans la semaine (voire 2 semaines pour les projets un peu plus conséquents) et publication d’un résumé et mise à disposition des sources le dimanche soir…

    Pour le moment, le projet DeezerNotifier n’est pas terminé donc pour cette semaine, ça restera le fil rouge.

    En ce qui concerne la suite, quelques idées qui me passent par la tête :

    • Interfacer un AVR avec un écran de 3310 (ce qui nécessitera je pense une semaine pour voir comment organiser les projets AVR avec X-Code, comment rendre les sources accessibles depuis le net…)
    • Interfacer un AVR avec un GPS (…)
    • Page récapitulative des projets tracs hébergés sur une même machine (1 dev doit pouvoir consulter rapidement tous les tickets le concernant, doit pouvoir voir tous les tickets récemment saisies mais non affectés, etc)
    • Interface IR pour commander mon APN.
    • Interfacer un AVR avec un moteur pas-à-pas (type lecteur de disquette)
    • Interfacer un AVR avec un moteur CC via LN297 ou autre (nécessitera du matos que je n’ai pas…)
    • Interfacer un AVR avec une carte mémoire (SD ? pour limiter l’investissement dans la connectique)
    • Interface FM pour sortie audio d’un PC –> broadcast de mes playlist dans les pièces de l’appart
    • Interface AVR pour radio traffic ?
    • Mettre en place les différents modules nécessaire à la réalisation du “radio réveil” évoqué dans un post précédent.
    • Notifier gmail pour Gnome (via send-notify || zenity) & Mac OS via (Growl)
    • JTAG pour AVR
    • Et plein d’autres encore…

    written by Mathias