Mar 162014
 

fitbit linux
Recentemente ho ricevuto un FitBit flex come regalo, e mi piace, questo dispositivo personale registra i passi, la distanza e le calorie bruciate. Di notte, traccia la qualità del sonno e ti sveglia silenziosamente al mattino. Basta controllare le luci per vedere come si accumulano rispetto al proprio obiettivo personale. Flex consente di impostare un obiettivo e utilizza luci a LED per mostrare come si sta andando. Ogni indicatore rappresenta il 20% del proprio obiettivo . Si sceglie quale – passi, calorie, o la distanza. Si accende come un tabellone, invogliando ad essere ogni giorno più attivi.

Flex sincronizza automaticamente i dati con PC e Mac con il dongle Wireless di Fitbit ( incluso), molti dispositivi iOS ed alcuni telefoni Android si collegano al dispositivo. Ora tutto questo suono fantastico e davvero divertente se vi piace prendere le vostre statistiche e vedere bei grafici, ma c’è un piccolo (grande) problema circa Fitbit, non supporta ufficialmente Linux.

Certo, è possibile utilizzare un smartphone , ma in generale mi piace l’idea di utilizzare i miei computer Linux per tutto e facendo alcune ricerche ed alcuni test sono stato in grado di sincronizzare con successo il mio flex con il mio Linux Mint 16 .



Da Fitbit one and Debian:

In primo luogo, inizierò con alcune informazioni tecniche sul Fitbit. I nuovi sistemi FitBit utilizzano Bluetooth 4.0 LE per la sincronizzazione, piuttosto che il protocollo ANT proprietario. Questo è un bene ed un male per gli sviluppatori. Il protocollo Bluetooth è abbastanza aperto per sviluppare, ma vi sono ancora problemi di come comunicare con il tracker Fitbit. Fortunatamente per noi, ci sono sviluppatori che hanno lavorato sui modi per farlo .

La più antica implementazione per sincronizzare Fitbit era con libfitbit – questo era il protocollo ANT per sincronizzare i tracker. Questo si è evoluto fino a quando una brava persona di nome Benoît Allard ha creato uno script python chiamato galileo . Questo è lo script che ci accingiamo a utilizzare per sincronizzare il tracker. Una cosa interessante Fitbit, è che il server analizza l’ID del dispositivo e collega i dati trasmessi ai conti appropriati, piuttosto che un’applicazione client – side che svolgesse il collegamento ad un determinato account. Questo rende la sincronizzazione un po’ più facile.

Galileo è un programma di utilità Python per sincronizzare in modo sicuro un dispositivo Fitbit con il servizio web Fitbit. Esso permette di consultare i dati sul loro sito web, e le loro applicazioni.

Tutti i tracker basati su Bluetooth sono supportati. Questi sono:

  • Fitbit One
  • Zip Fitbit
  • Fitbit Flex
  • Probabilmente Fitbit Force

nota : Il tracker Ultra di Fitbit è ** non supportato ** in quanto comunica utilizzando il protocollo ANT. Per sincronizzarlo si può utilizzare libfitbit.

Le caratteristiche principali di Galileo sono:

  • Sincronizza i tracker Fitbit con il server Fitbit utilizzando il dongle incluso.
  • Comunica (tramite HTTPS) con il server Fitbit.
  • Salvare tutti i tuoi dati a livello locale con un dump per un eventuale successiva analisi.

Dan, l’autore dell’articolo ha correttamente installato la versione stabile di Galileo in una Debian 7 e tutto ha funzionato senza problemi per lui, io non ho avuto la stessa fortuna sulla mia Mint 16, quindi probabilmente la maggior parte degli utenti di Ubuntu avranno i miei stessi problemi, ma con qualche cambiamento sono riuscito a farlo funzionare, ecco come.

Attenzione: Galileo è ancora nelle sue prime fasi di sviluppo ed è disponibile solo dalla riga di comando, quindi non aspettatevi di avere un’applicazione grafica simile a quella che si trova in Windows, per usarlo si deve lavorare sul terminale, la buona notizia è che non è così difficile farlo funzionare e probabilmente in futuro qualche applicazione grafica basata su di esso sarà disponibile per tutti.

Installare le librerie necessarie

Galileo è scritto in python e quindi abbiamo bisogno delle librerie usb per python, per distribuzioni basate su Debian potete usare questo comando:

sudo apt-get install python-usb python-requests

Inoltre Galileo richiede le librerie pyusb alla versione 1.0 o superiore, la 0.4 non è supportata, quindi ho seguito il suggerimento di Dan ed ho aggiornato manualmente la libreria python-usb con le sue istruzioni:

Scaricare lo script pyusb dal file zip che si trova qui .

Decomprimere la cartella in una posizione comoda.

Andare nella nuova directory in un terminale come root ed eseguire il seguente comando:

 python setup.py install

Ora avete i prerequisiti installati.

Installare Galileo, metodo 1

Come primo metodo vi suggerisco di provare a installare Galileo in modo “standard”, questo sembra funzionare per alcune distribuzioni (Debian e Arch), per fare questo aprire un terminale e digitare:

sudo pip install galileo

Dovreste avere un output di questo tipo:

$ sudo pip install galileo
Downloading/unpacking galileo
  Downloading galileo-0.3.1.tar.gz
  Running setup.py egg_info for package galileo
 
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python2.7/dist-packages (from galileo)
Requirement already satisfied (use --upgrade to upgrade): pyusb in /usr/local/lib/python2.7/dist-packages (from galileo)
Installing collected packages: galileo
  Running setup.py install for galileo
 
    Installing galileo script to /usr/local/bin
Successfully installed galileo
Cleaning up...

Ora è possibile testare questa versione di Galileo con il comando :

 sudo galileo

Se tutto funziona dovreste vedere qualcosa di simile a :

1 trackers found, 0 skipped, 1 successfully synchronized

E si può passare alla sezione “Come eseguire Galileo come utente diverso da root” , nel mio caso ho ottenuto questo errore :

$ sudo galileo
Traceback (most recent call last):
  File "/usr/local/bin/galileo", line 9, in 
    load_entry_point('galileo==0.3.1', 'console_scripts', 'galileo')()
  File "/usr/local/lib/python2.7/dist-packages/galileo.py", line 564, in main
    total, success, skipped = syncAllTrackers(cmdlineargs.force, cmdlineargs.dump)
  File "/usr/local/lib/python2.7/dist-packages/galileo.py", line 423, in syncAllTrackers
    fitbit.disconnect()
  File "/usr/local/lib/python2.7/dist-packages/galileo.py", line 203, in disconnect
    self.dongle.ctrl_write([2, 2])
  File "/usr/local/lib/python2.7/dist-packages/galileo.py", line 150, in ctrl_write
    l = self.dev.write(0x02, data, self.CtrlIF.bInterfaceNumber, timeout=timeout)
TypeError: write() got multiple values for keyword argument 'timeout'

Installare Galileo, metodo 2

Ho scaricato lo zip della versione più recente dalla pagina del progetto e l’ho decompresso.
Ora, nella nuova directory troverete il comando run , che in questa versione sostituisce il comando galileo .

Per testarlo muoversi nella nuova directory e dare il comando:

sudo ./run

Ancora una volta, se si vede un output di successo tutto è fatto e si può passare alla sezione successiva, nel mio caso avevo ancora un errore:

$ sudo ./run
No handlers could be found for logger "galileo.config"
# A serious error happened, which is probably due to a
# programming error. Please open a new issue with the following
# information on the galileo bug tracker:
#    https://bitbucket.org/benallard/galileo/issues/new
# ./run: 0.4dev
# Python: 2.7.5+ (default, Feb 27 2014, 19:37:08) [GCC 4.8.1]
# Platform: Linux mint-desktop 3.11.0-12-generic #19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013 x86_64 x86_64
# pyusb: 1.0.0b2
# requests: 1.2.3
# yaml: own version
Traceback (most recent call last):
  File "./run", line 5, in 
    main()
  File "/home/linuxaria/Downloads/benallard-galileo-540c1f6d394a/galileo/main.py", line 239, in main
    }[config.mode](config)
  File "/home/linuxaria/Downloads/benallard-galileo-540c1f6d394a/galileo/main.py", line 174, in sync
    total, success, skipped = syncAllTrackers(config)
  File "/home/linuxaria/Downloads/benallard-galileo-540c1f6d394a/galileo/main.py", line 37, in syncAllTrackers
    fitbit.disconnect()
  File "/home/linuxaria/Downloads/benallard-galileo-540c1f6d394a/galileo/tracker.py", line 36, in disconnect
    self.dongle.ctrl_write([2, 2])
  File "/home/linuxaria/Downloads/benallard-galileo-540c1f6d394a/galileo/dongle.py", line 115, in ctrl_write
    l = self.dev.write(0x02, data, self.CtrlIF.bInterfaceNumber, timeout)
TypeError: write() takes at most 4 arguments (5 given)

Guardando nella lista di bug di Galileo ho trovato questa  informazione:

Benoît Allard

This is a duplicate of issue #36 and #27. Please use a tagged release of pyusb, or remove the third parameter in the calls to write and read in galileo/dongle.py

Io non sono un programmatore python, ma ho provato a seguire l’istruzione e così ho tolto il terzo parametro nel file galileo/dongle.py, per farla breve ho rimosso il parametro self.CtrlIF.bInterfaceNumber nelle linee: 115, 122, 136 e 144 (il numero di riga potrebbe cambiare nelle versioni future).

Questo è un diff dal file originale e quello ho cambiato:

115c115
< l = self.dev.write(0x02, data, self.CtrlIF.bInterfaceNumber, timeout) --- >         l = self.dev.write(endpoint=0x02, data=data, timeout=timeout)
122c122
< data = self.dev.read(0x82, length, self.CtrlIF.bInterfaceNumber, --- >             data = self.dev.read(0x82, length,
136c136
< l = self.dev.write(0x01, msg.asList(), self.DataIF.bInterfaceNumber, --- >         l = self.dev.write(0x01, msg.asList(), 
144c144
< data = self.dev.read(0x81, 32, self.DataIF.bInterfaceNumber, --- >             data = self.dev.read(0x81, 32,

E con questo cambiamento finalmente funziona con Mint 16 !!

$ ./ sudo run -v
2014-03-16 22:38:11,302:INFO: Running in mode: sync
2014-03-16 22:38:11,314:INFO: Disconnecting from any connected trackers
2014-03-16 22:38:13,328:INFO: Discovering trackers to synchronize
2014-03-16 22:38:17,340:INFO: 1 trackers discovered
2014-03-16 22:38:17,340:INFO: Attempting to synchronize tracker EDB71B44D7D7
2014-03-16 22:38:17,353:INFO: Starting new HTTPS connection (1): client.fitbit.com
2014-03-16 22:38:26,911:INFO: Getting data from tracker
2014-03-16 22:38:27,819:INFO: Sending tracker data to Fitbit
2014-03-16 22:38:27,821:INFO: Starting new HTTPS connection (1): client.fitbit.com
2014-03-16 22:38:29,566:INFO: Successfully sent tracker data to Fitbit
2014-03-16 22:38:29,567:INFO: Passing Fitbit response to tracker
1 trackers found, 0 skipped, 1 successfully synchronized

Opzioni utili di Galileo

Stò utilizzando la versione 0.4dev, nella versione 0.3 potreste non avere tutte queste opzioni:

Livello di logging :
-v, –verbose Mostra i progressi durante la sincronizzazione
-d, –debug Mostra le attività interne (implica anche l’output dell’opzione verbose)
-q, –quiet Mostra solo gli errori ed il sommario finale (default)

se sincronizzare anche se il tracker segnala un recente sync (< 15 minuti)

--force
--no-force DEFAULT

Quindi, per impostazione predefinita, se si utilizza il comando run 2 volte di seguito NON invierà i dati a fitbit.com e vedrete un messaggio di skipping:

$ sudo ./run  -v
No handlers could be found for logger "galileo.config"
2014-03-16 22:39:51,946:INFO: Disconnecting from any connected trackers
2014-03-16 22:39:53,959:INFO: Discovering trackers to synchronize
2014-03-16 22:39:57,971:INFO: 1 trackers discovered
2014-03-16 22:39:57,972:INFO: Tracker EDB71B44D7D7 was recently synchronized; skipping for now
2014-03-16 22:39:57,972:INFO: Tracker EDB71B44D7D7 is to be skipped due to configuration; skipping
1 trackers found, 1 skipped, 0 successfully synchronized
Se salvare o no il megadump su file:
 
--dump DEFAULT
--no-dump
 
I dump si trovano per default nella directory ~/.galileo/YOURTRACKERID/ e sono file binari, se non avete intenzione di usarli si può usare l'opzione --no-dump.
 
<h3>Come eseguire Galileo come utente non privilegiato</h3>
 
L'esecuzione di galileo richiede sudo, ma si può aggirare questa limitazione aggiungendo una semplice regola udev. Creare e aggiungere quanto segue a /etc/udev/rules.d/99-fitbit.rules
 
<pre lang="bash">SUBSYSTEM=="usb", ATTR{idVendor}=="2687", ATTR{idProduct}=="fb01", SYMLINK+="fitbit", MODE="0666"

Non dimenticatevi di:

Fare un restart dei servizi udev con :

sudo service udev restart

.
togliere e rimettere il dongle usb fornito da fitbit per attivare la nuova regola.

Conclusioni

Come si può vedere il progetto è ancora nuovo ed ha bisogno di qualche ritocco per funzionare, ma ha un sacco di potenzialità ed opzioni utili.
Una volta che funziona sul vostro PC è possibile impostare un cron ogni 30 minuti o più per sincronizzare i dati con il sito web, oppure è possibile eseguirlo come demone (solo versione 0.4 o successiva) ed avere tutte le statistiche aggiornate dal vostro PC GNU/Linux.

Ora è anche possibile invitarmi ad essere vostro amico su fitbit.com, la mia email è [email protected]

Buon allenamento a tutti gli utenti GNU/Linux !



Popular Posts:

flattr this!

  5 Responses to “Come sincronizzare il proprio Fitbit usando Linux”

  1. Galileo is great! One less reason to keep Windows around in a VM.

    After I downloaded galileo, it installed on Fedora 19 without a hitch. I used the following two commands

    yum -y install python-pip pyusb python-requests
    pip install galileo

    Looking forward to seeing the evolution of this product.

  2. Excellent, thank you for this guide.
    I only have one issue left now and thats running it as non sudo
    Followed your guide and created the udev rule, restarted udev etc and it works, but only once , after that it will only work using sudo.
    Seems to work if i pull dongle out and put it back in but will have to check that again in a bit.

    Again thank you for your superb guide

  3. I’ve made it easier for Ubuntu users and packaged galileo in a PPA, so now all you need to do is `sudo add-apt-repository ppa:cwayne18 && sudo apt-get update && sudo apt-get install galileo` and then reboot, and syncing will take place automatically

  4. Followed Chris’s instructions for Ubuntu dated 04/26/2014 above on 14.04 amd64 and was advised “Unable to locate package galileo.”

  5. The install mostly worked for Ubuntu Precise, except for galileo itself.
    ]$ sudo apt-get install galileo
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    E: Unable to locate package galileo

    ]$ sudo apt-get install fitbit-steps-indicator
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    The following packages were automatically installed and are no longer required:
    libts-0.0-0:i386 twolame linux-headers-3.2.0-29
    linux-headers-3.2.0-29-generic libaften0 nvidia-settings-304 mjpegtools
    Use ‘apt-get autoremove’ to remove them.
    The following NEW packages will be installed:
    fitbit-steps-indicator
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 8,070 B of archives.
    After this operation, 60.4 kB of additional disk space will be used.
    Get:1 http://ppa.launchpad.net/cwayne18/fitbit/ubuntu/ precise/main fitbit-steps-indicator amd64 0.2~precise1 [8,070 B]
    Fetched 8,070 B in 0s (25.4 kB/s)
    Selecting previously unselected package fitbit-steps-indicator.
    (Reading database … 839219 files and directories currently installed.)
    Unpacking fitbit-steps-indicator (from …/fitbit-steps-indicator_0.2~precise1_amd64.deb) …
    Setting up fitbit-steps-indicator (0.2~precise1) …

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>