[Neues Modul - 32_fitbit.pm] Fitbit Web API

Begonnen von TeeVau, 17 Juni 2017, 17:40:41

Vorheriges Thema - Nächstes Thema

TeeVau

Hallo FHEM'ler,

anbei die erste Beta-Version des Fitbit Moduls. Das Modul benutzt die WEB API von Fitbit (https://dev.fitbit.com/docs/). Das Modul läuft jetzt seit 24 Stunden bei mir, so wie es aussieht auch Stabil ;-)
Für das Benutzen der API muss, ein wenig umständlich, eine Applikation bei Fitbit registriert werden. Das geht ganz fix und kostet auch nichts. Anbei quick and dirty die Anleitung:

       
  • App Registrtieren:
    https://dev.fitbit.com/apps/new aufrufen, mit den Fitbit Benutzerdaten einloggen. Daten wie folgt angeben: 1.PNG
    Hinweis: Als URL sollte eine eigene Webseite angegeben werden. Später wird durch Fitbit die angegebene URL aufgerufen (Callback). In dieser Callback-URL ist der Token enthalten. Bei dem Benutzen von www.fhem.de als Callback URL, wird im Webserver von fhem.de das Token protokolliert.
  • App authorisieren:
    Siehe 2.PNG
    Klickt auf "OAuth 2.0 tutorial page" und es öffnet sich ein neues Fenster (Siehe 3.PNG).
    In diesem Fenster muss der gelb markierte Link angeklickt werden. Es öffnet sich ein neues Fenster (Siehe 4.PNG).
    Dort muss man angeben, welche Daten von der API benutzt werden dürfen. Ebenso wird angegeben wie lange das ganze Freigegeben ist. Nach dem klick auf "Erlauben" kommt man auf die Callback Website. Der Token ist in dem Link mitangegeben! (Siehe 5.PNG)
  • Token aus Link extrahieren.
    Der Callback Link im Browser sieht wie folgt aus: http://www.fhem.de/#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1UVo3REYiLCJhdWQiOiIyMjhGR1giLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJyc29jIHJzZXQgcmFjdCBybG9jIHJ3ZWkgcmhyIHJudXQgcnBybyByc2xlIiwiZXhwIjoxNTI5MjQ4NjcxLCJpYXQiOjE0OTc3MTI2NzF9.s3Fk_mymuMreOYOiOxDg6f9awoD544FsL59qlnJgMTE&user_id=5QZ7DF&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=31536000
    Für uns ist der Inhalt von "access_token=" wichtig. Also der Fett markierte Teil.
  • FHEM Device vom Typ ACCOUNT anlegen
    Nun wird mit dem folgenden Befehl der ACCOUNT angelegt. Das Modul legt dann automatisch die Devices, den eigenen Beutzer sowie Freunde als eigene Devices an.
define fitbit_IO fitbit ACCOUNT eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1UVo3REYiLCJhdWQiOiIyMjhGR1giLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJyc29jIHJzZXQgcmFjdCBybG9jIHJ3ZWkgcmhyIHJudXQgcnBybyByc2xlIiwiZXhwIjoxNTI5MjQ4NjcxLCJpYXQiOjE0OTc3MTI2NzF9.s3Fk_mymuMreOYOiOxDg6f9awoD544FsL59qlnJgMTE

       
  • [/l]
       

            
    • So sollte es dann aussehen :-)
      Siehe 6.PNG bis 9.PNG
    Testen konnte ich das nur mit Benutzern die einen Schrittzähler haben. Zur Zeit sind die Datenpunkte für die Waage nicht berücksichtigt. Werde ich demnächst noch angehen, kann dann aber nur eine Trockenübung machen, da ich selber keine Fitbit Waage habe.

    Wer es Testen möchte: Bitte sehr :-)

    Tobias


2017-07-04

       
       
  • commandref EN created
  • reading summary_activeScore removed
  • fitbit_parseUserWeight: set reading weight
  • fhem() is used with silent param
2017-06-25

       
  • fitbit_initDevice beschreibt Reading batteryLevel, anstatt battery
2017-06-24, 2. Beta-Version


       
  • Einige Werte von INTERNAL zu Reading umgestellt
  • FHEM sollte nicht mehr abstürzen, wenn der Token ungültig ist
  • "weight" Daten werden zur Verfügung gestellt (API: Get Weight Logs)
  • Sleep Daten der letzten Nacht werden ausgelesen (API: Get Sleep Logs by Date)
  • Die eigentlich statischen Daten (Name,Geburtsdatum, Geschlecht etc.) je Device werden alle 6 Stunden neu ausgelesen
  • Alle 6 Stunden wird nach neuen FRIEND, DEVICE, oder USER gesucht.
  • Error Meldungen im JSON Reply werden erkannt und ausgegeben.
  • Freunde können im Device ACCOUNT mit "set getFriends" gesucht und ggf. als Device angelegt werden
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

igami

Vielen Dank,
werde ich gleich mal einrichten.

Darf ich fragend warum die Schlafphasen auskommentiert sind? Das ist einer der Punkte dich mich stark interessiert um anhand dessen den Lichtwecker zu stellen :)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

Kurze Meinung/Frage meiner seits. Persönlich, wohl gemerkt persönlich, finde ich das viele Internals mehr Readings sind.

battery, device Version, id, lastSync, dateOfBirth, displayName und und und



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jojoja

Hallo Tobias,

danke für die Arbeit! Hat auf Anhieb funktioniert, werde das Modul auf jeden Fall verfolgen.
Hab ein Charge 2 Armband, wenn was neues kommt werde ich es gleich probieren :D

Gruß Johannes
FHEM 6.0 @ IntelNUC6CAYH;  Unifi USG, Switch, AP AC Pro; HM-MOD-UART;  Sonos Play 1 & 3, One, Beam; Philips Hue

Helmi55

Hallo
Installation hat funktioniert und ich empfange Daten.
Auch von allen Freunden!  Nicht nur die vom eigenen Fitbit.
Schönen Sonntag
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

reibuehl

Die Abfrage von Gewichtswerten einer Aria Waage scheint nicht zu funktionieren. Im State steht "weight kg", also kein numerischer Wert. Außerdem scheint bei Umlauten im Internal fullName was schief zu gehen. Ein "ü" wird als "ÃÆ'Æâ€â„¢ÃƒÆ’â€Å¡Ãƒ,¼" angezeigt.
Die Waage selbst und die für die Waage registrierten Benutzer werden aber sonst angelegt. Was ich nicht so toll finde, ist dass es keine Zuordnung bei den Namen der Devices gibt, die anzeigt, was zusammengehört. Hier wäre m.M.n. ein Konzept wie bei den "Channels" der HomeMatic Devices besser, falls das von der Logik her geht.
Reiner.

TeeVau

Hallo zusammen,

danke für das Feedback. Das mit den INTERNALs werde ich noch umstellen. Vieles habe ich aus dem Withings-Modul (einfach blind) übernommen.
Die Schlafphasen sind deshalb auskommentiert, da ich an diesem Teil noch nichts gemacht habe. Der Code ist noch aus dem Withingsmodul. Ich hab das aber auf dem Schirm. Das sind allerdings relativ viel Daten, da weis ich noch nicht so genau wie das sinnvoll in Readings zu packen ist.
Das bezüglich der Umlaute gucke ich mir an, danke für den Hinweis. Die Werte der Waage werden zur Zeit nicht ausgelesen, das korrigiere ich noch.

@reibuehl
Was meinst du genau, mit der Zuordnung der Namen zu den Devices? Ich selber hab kein Homematic, kenne deshalb die Logik der "Channels" nicht.
Die API liefert immer nur die Devices, die dem eigenen Account gehören. Hast du also ein Fitbit Device, dann ist das auch deins. Du kannst dir kein Device von einem Freund anzeigen lassen. Demnach ist die Zuordnung, wenn ich nichts falsch verstanden habe, einfach: Jedes Fitbit Device gehört dem eingerichteten ACCOUNT/USER

Grüße, Tobias
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

reibuehl

Hallo Tobias,

bei den HomeMatic Thermostaten gibt es ein Device, z.B. HM_ABCD1234 und davon abhängige Channels, z.B. für die Verbindung zu Fensterkontakten einen HM_ABCD1234_WindowRec, die in FHEM auch als eigene Devices definiert sind. Damit ist schon beim ersten Blick klar, das HM_ABCD1234_WindowRec zu HM_ABCD1234 gehört.

Ich hab aber inzwischen gesehen, dass Du die Device Namen ähnlich vergibst und mich nur die Aliase verwirrt haben, da diese erst mal keinen Rückschluss auf Fitbit gegeben haben, z.B. "Reiner B." als alias für das "Device" fitbit_<ID> vom Subtype USER. Hier denke ich könnte der Subtype noch im Namen des Devices auftauchen, also fitbit_USER_<ID>.

Gruß,
Reiner
Reiner.

reibuehl

Was mir gerade noch eingefallen ist: In der Anleitung zur Registrierung an der API sollte man vermutlich eher die URL zu einer eigenen Webseite verwenden, da bei Verwendung von http://www.fhem.de die ganzen API Keys im Logfile von www.fhem.de gesammelt werden. Dass ist Sicherheitstechnisch eher unschön.

Gruß,
Reiner
Reiner.

DS_Starter

Hallo Tobias,

ich freue mich dass es nun auch ein Modul für fitbit gibt. :)  Danke sehr !
Habe es natürlich auch gleich ausprobiert. Mein Tracker ist ein Blaze (erst seit kurzem).

Die Einrichtung hat auch soweit gut funktioniert. Aufgefallen ist mir dass bei einem FHEM-Neustart zunächst solche Einträge im Log stehen:


2017.06.19 19:21:49.135 3: fitbit: define() fitbit_IO fitbit ACCOUNT crypt:5d4e7b0a5a72065f295b292f....................................
2017.06.19 19:21:49.135 3: fitbit_IO: Define an account
2017.06.19 19:21:49.137 3: Init NOT done
2017.06.19 19:21:49.137 3: fitbit: define() fitbit_U5RMVHT fitbit USER 5RMVHT
2017.06.19 19:21:49.137 3: fitbit_U5RMVHT: Define an USER
2017.06.19 19:21:49.138 3: Init NOT done
2017.06.19 19:21:49.139 3: fitbit: define() fitbit_D435990681 fitbit DEVICE 435990681
2017.06.19 19:21:49.139 3: fitbit_D435990681: Define an DEVICE
2017.06.19 19:21:49.140 3: Init NOT done


Zunächst denkt man dass hier etwas nicht funktioniert hat. Alle vorher definierten devices, also der fitbit_IO, der Tracker und mein User stehen auf "initialized".
Aber der Schein trügt, denn wenig später werden wieder Daten empfangen/upgedated, der state ändert sich und alles sieht dann normal aus.

Vllt. kann man die Startseequenz noch etwas tunen ... oder bei mir hat tatsächlich etwas nicht richtig funktioniert.

Danke und Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rabehd

Ich habe gestern das Modul installiert, danke für die Arbeit.

Der erste Versuch des Define schoss FHEM erstmal ab. Meine Vermutung ist, dass ich beim Kopieren des Token etwas unaufmerksam war.

Der zweite Versuch war erfolgreich.
Das STATE-Attribut habe ich angepasst (jeweils für jedes Device).
Als nächster Schritt muss ich meine Batterieliste pflegen, da erscheint der Tracker als fast leer, während das Device den Level high hat.

Was mir noch fehlt ist eine Verwendung in FHEM  :-\, Anzeige ist erstmal schön, aber etwas damit auslösen besser.
Auch funktionierende Lösungen kann man hinterfragen.

TeeVau

Zitat von: DS_Starter am 19 Juni 2017, 19:39:45
...
Zunächst denkt man dass hier etwas nicht funktioniert hat. Alle vorher definierten devices, also der fitbit_IO, der Tracker und mein User stehen auf "initialized".
Aber der Schein trügt, denn wenig später werden wieder Daten empfangen/upgedated, der state ändert sich und alles sieht dann normal aus.
Vllt. kann man die Startseequenz noch etwas tunen ... oder bei mir hat tatsächlich etwas nicht richtig funktioniert.

Danke und Grüße
Heiko
Das Abfragen der Daten erfolgt zeitverzögert, nachdem define. Die LOG Meldungen sind noch nicht so korrekt. Da sind noch hier und da Sachen enthalten, die ich zum Entwickeln brauchte..

@rabehd
Das mit dem Token ist mir gestern Abend auch aufgefallen. Wollte "mal eben" noch etwas programmieren. Wenn der Token ungültig ist, stürzt FHEM ab. Hab ich auf dem Schirm.

Urlaub ist leider vorbei, jetzt dauert es hier und da noch etwas ;-)

Trotzdem Danke für das Feedback. Ich nehme es auf.

Tobias
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

rabehd

Großkotzig könnte ich sagen: "Mir doch egal, ich habs ja drin".
Es ist schön, wenn Du für folgende Nutzer sowas ausschließt. Aber, FHEM ist leider nicht alles...
Du bist hoffentlich erholt.
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

Ich habe ein wenig Verständnisprobleme/Vertrauensprobleme mit den Readings.

Was sagt battery aus? Warum wird es nicht aktualisiert?
Warum ist das letzte Einlesen des batteryLevel so lange her?



batteryok2017-06-19 22:04:44
batteryLevelMedium2017-06-21 13:22:33
lastSyncTime2017-06-22T10:13:57.0002017-06-22 10:18:10

Auch funktionierende Lösungen kann man hinterfragen.

CoolTux

Weil es keine Änderung des Readings gab. Der Timestamp des Readings ändert sich nur bei Änderung des Readings.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net