Node-Eyefi
Allows an Eye-Fi card to post images directly to your node.js-application.
Installation
Standalone
git clone git://github.com/usefulthink/node-eyefi.git
cd node-eyefi && npm install .
As a module
npm install eyefi
Preparations
- you'll obviously need an Eye-Fi card. Amazon has these.
- connect the eye-fi card to your computer and run the setup found on the card
(on linux you might want to try Dave Hansen's eyefi-config found here:
http://goo.gl/D3UVy)
- the card should be configured to use your network with the TransferRelay
mode (and any other fancy-pants feature) turned off
- test it with the software provided.
- make sure that the card is in the same network (and network-segment, i.e.
can send packets to) as your computer.
- close the eye-fi helper and manager.
- Locate the
Settings.xml
-File (Windows: \Users\<username>\Application Data\Eye-Fi\Settings.xml
,
OS-X: ~/Library/Eye-Fi/Settings.xml
) to find out the cards mac-address and
uploadKey
Running standalone
# create a file named config.json (just copy the config.json.sample)
cp config.json.sample config.json
# edit config.json and enter your cards mac-address and uploadKey
# start the server
node standalone.js
now take a photo to see if it's working.
Integrate into your own project
Integration is possible, and not really complicated.
It basically just works (or maybe doesn't) and emits an
imageReceived
-Event whenever the upload of an image is completed.
Additionally, you may listen for uploadProgress
-events which are fired during
the file-upload.
By default, logging will print error-messages to the console. This is
something I'm working on. (If you want to customize logging, the only way
for now is to create your own logger-instance (see standalone.js))
var eyefi = require('eyefi');
var eyefiServer = eyefi({
uploadPath : '/where/uploaded/files/are/stored',
cards : {
'<macaddress>': {
uploadKey: '<uploadKey>'
}
}
}).start();
eyefiServer.on('imageReceived', function(data) {
console.log('received an image: ' + data.filename);
});
eyefiServer.on('uploadProgress', function(progress) {
console.log( (100*progress.received/progress.expected).toFixed(2) + '% complete');
});
Doesn't work?
Shit happens. File an issue
or drop me a line. I'll see what I can do.
Dive deeper?
If you want to undestand what is really going on behind the scenes, you could
start here:
Acknowledgements
Inspired by prior work of Sebastian Hoitz and Thomas Schaaf – their project
(http://goo.gl/HOxO2) gave me some insights and was some kind of starting-point
for me.
Also, thanks to all the people who dissected the eye-fi cards and the protocols.