modul für withings wage (und blutdruck messgerät)

Begonnen von justme1968, 22 Dezember 2013, 00:28:31

Vorheriges Thema - Nächstes Thema

Markus M.

#15
Schön dass ich nicht der Einzige bin bei dem es teures Spielzeug zu Weihnachten gab :)

Ok, nach ein wenig Pfusch habe ich ein quick&dirty Update, mit dem wir die Temperatur- und CO2 Werte und noch ein wenig netten Kram wie den Batteriezustand der Waage bekommen.
Von Withings gibt es das wahrscheinlich eh erst zum St. Nimmerleinstag.
Um das Blutdruckmessgerät hab ich mich nicht gekümmert, fand das zu unpraktisch.


Was es tut: Mit 2 optionalen weiteren Parametern (Device ID und Session ID) werden über die Schnittstelle die die Withings Oberfläche benutzt die relevanten Daten geholt.
Die IDs findet man aktuell mit etwas Debugging im Browser raus.
Wenn man sich nicht ausloggt, bleibt die Session gültig - mal sehen wie lange

Benutzung:
define <name> withings <user> <key> [<deviceid> <sessionid>]
Für einen Benutzer mit einem Body Analyzer passt das erst mal

Was jetzt hier dran noch zu tun ist:
- Das Modul aufteilen in Benutzer (der Teil von Andre) und Geräte (der Teil von mir)
- Die Werte beider Werte-Abfragen erst zwischenspeichern und vor dem ReadingsUpdate nach Timestamp sortieren
- Eine SessionID irgendwie über Anmeldung mit user/pass auf withings.com beziehen und die Session nach der Abfrage beenden
- ...

Darum müsste sich aber irgendjemand kümmern der zumindest rudimentäre Perl Kenntnisse hat.
Viel Spass damit!

Markus
Aktuell weder Smarthome noch FHEM vorhanden

justme1968

der saubere weg ist vermutlich sich per oauth am withings server zu authentifizieren.

ich kann mal schauen wie weit ich da komme.

ich denke es ist nicht nötig zwei module draus zu machen. das geht auf jeden fall auch mit einem modul.

meine wage liefert nur die werte nicht. wenn ich was zum testen habe bräuchte ich dann jemand mit dem entsprechenden model.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

Mit Testdaten kann ich im Zweifelsfall dienen ;)
Allerdings bin ich mir ziemlich sicher dass OAuth hier nichts bringt, da das nicht Teil der offiziellen API ist.
Der Zugriff erfolgt über die Session ID die man nach dem Browser-Login im Cookie bekommt.
Die Daten die wir wollen gibt Withings aktuell nur über die eigene Öberfläche raus - da aber immerhin gleich im JSON Format.
Aktuell weder Smarthome noch FHEM vorhanden

justme1968

du hast recht. das normale api gibt nur user daran, body metrics und activity metrics. blöd.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

#19
AUTH bei denen auf der Seite ist leider der blanke Horror.
Da wird erst mal per Javascript ein Token abgeholt und ein Hash daraus und aus den Logindaten erzeugt und mitgeschickt und scheinbar auch noch einige andere Schweinereien.
Ich weiss wie ich den Token bekomme und den Hash erzeuge, bekomme aber noch keine Session ID.
Mal sehen ob mir am Sonntag wieder danach ist :)

P.S.: Kann man diesen unsäglichen Unsinn mit Absenden bei Alt-S irgendwie deaktivieren?
Das passiert immer wenn man auf einer US-Tastatur ein scharfes S tippen möchte :(
Aktuell weder Smarthome noch FHEM vorhanden

d0np3p3

Vielleicht ist es fast einfacher per dns umleitung und Proxy an die Daten zu kommen,
also direkt von der Waage.

Sent from my ASUS Transformer Pad TF700T using Tapatalk 4
FHEM: Raspberry Pi (COC) & Fritz 7270 (freetz FHEM2FHEM)
IT (Elro AB440 AB600D) - Max! (6*regler 1*Thermostat 5*Fenster) Hue Bridge mit Bulbs - 2*Living-white Adapter - Iris
XBMC (Zbox) 4*SqueezeRadios 3*squeezelite dbox
AndFhem (Nexus4)

Borkk

Coole Sache, hab mir gerade einen etwas umständlichen Weg über eine IFTTT Mail und dem Mailcheck Modul gebaut ;-) Werde das Modul gleich mal einbinden.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Markus M.

Zitat von: d0np3p3 am 04 Januar 2014, 17:10:53
Vielleicht ist es fast einfacher per dns umleitung und Proxy an die Daten zu kommen,
also direkt von der Waage.

Wenn du die volle Funktionalität mit withings.com behalten möchstes ist das auch nicht ideal.
Ausserdem ist es nur was für den fortgeschrittenen Anwender...
Aktuell weder Smarthome noch FHEM vorhanden

Markus M.

Ok, alles fertig.
Na zumindest fast alles - jetzt muss eigentlich nur noch jemand ein FHEM Modul draus basteln  ;D


Im Anhang findet sich mein aktuelles Modul, das Daten für einen einzelnen User und zusätzlich die Luftdaten der Waage ausliest.
Da ist nochmal zu sehen wie die Daten zusammen mit den Userdaten nach Timestamp sortiert werden - etwas das im fertigen Modul mit den Daten über alle User/Devices passieren muss, da sonst im Log nur Schrott ankommt mit dem keine Plots mehr funktionieren.
Ausserdem habe ich noch mein Testscript angehängt, in dem alle nötigen Schritte für den Login auf withings.com nachzuvollziehen sind. Funktioniert auch über HTTP, sollte also keine weiteren Installs benötigen.
Zum Testen eigene Logindaten einfügen und in der Shell starten.


Jetzt müsste jemand übernehmen der sich ein wenig mit FHEM auskennt und daraus folgendes programmieren:

-Modul/Parent Device "Withings" für das Modul selbst, das die Logindaten für withings.com enthält
-Child Device "WithingsUser" das die eigentlichen Userdaten enthält, samt Autocreate
-Child Device "WithingsDevice" das die Gerätedaten enthält, samt Autocreate

Dann sollte man nur über User / Passwort alle User und alle Geräte in FHEM haben.

Ausser den Luftdaten der Waage und Batterieständen wäre es wahrscheinlich auch noch möglich, genauere Aktivitätsdaten vom Pulse zu bekommen als per API, ich habe allerdings (noch) keinen.


Schönes verlängertes Wochenende noch,
Markus
Aktuell weder Smarthome noch FHEM vorhanden

justme1968

klasse.

weisst du schon wie lange der session key gültig bleibt?

weiss jemand wie die zuordnung von users zu device ist wenn man mehr als ein device hat? gehören die messwerte eines users dann geräte übergreifend zur gleichen userid ?

für das sortieren habe ich noch keine wirklich gute idee.

das mit dem sortieren ist nicht nötig bzw. nicht möglich wenn pro user und gerät ein fhem device angelegt wird. jedes fhem device ist unabhängig von den anderen, pollt seine daten und erzeugt seine readings. man kann/darf nur nicht in das gleiche filelog loggen. mit dblog ist das kein problem.

wenn die readings user und geräte übergreifend sortiert werden müssen weil sie ins gleiche filelog sollen dann wäre es mehr fhem konform wenn sie auch nur ein einziges device erzeugt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

Zitat von: justme1968 am 05 Januar 2014, 20:59:06
weisst du schon wie lange der session key gültig bleibt?

Kannst du aus den Cookie-Daten auslesen wenn du ihn bekommst, waren 3 oder 4 Monate.


Zitat von: justme1968 am 05 Januar 2014, 20:59:06
weiss jemand wie die zuordnung von users zu device ist wenn man mehr als ein device hat? gehören die messwerte eines users dann geräte übergreifend zur gleichen userid ?

Es gibt 2 Arten von Readings: Die die nur an einem User hängen (Gewicht, Blutdruck etc.) und die die nur an einem Device hängen (CO2, Temperatur). Die Unterscheidung ist also kein Problem.
Die Geräte werden wahrscheinlich für alle Accounts auftauchen für die sie angemeldet sind.
In der Withings-Oberfläche kann man Geräte auch von allen anderen Accounts trennen und User eigenständig machen.
Habe ich noch nicht ausprobiert, ich glaube es sollte reichen wenn wir nur das betrachten was unterhalb eines Accounts hängt.


Zitat von: justme1968 am 05 Januar 2014, 20:59:06
für das sortieren habe ich noch keine wirklich gute idee.
das mit dem sortieren ist nicht nötig bzw. nicht möglich wenn pro user und gerät ein fhem device angelegt wird. jedes fhem device ist unabhängig von den anderen, pollt seine daten und erzeugt seine readings. man kann/darf nur nicht in das gleiche filelog loggen. mit dblog ist das kein problem.

Mist, dann muss ich doch mal wieder mit DBLog anfangen - das mit dem gleichen Filelog war nämlich meine Idee dahinter.
Die Gerätedaten musst du trotzdem filtern, da z.B. für CO2 immer doppelte, ältere Daten mitkommen.
Das liegt wohl daran dass sie für die Web-Anzeige optimiert sind. Es reicht, alles zu ignorieren was vor dem letzten erfolgreichen Update liegt.

Zitat von: justme1968 am 05 Januar 2014, 20:59:06
wenn die readings user und geräte übergreifend sortiert werden müssen weil sie ins gleiche filelog sollen dann wäre es mehr fhem konform wenn sie auch nur ein einziges device erzeugt.

Die Withings Daten intern zusammenzumischen macht aber irgendwie keinen Sinn.
Die haben nunmal Accounts, an denen User (auf dem Level arbeitet dein Modul gerade) und Geräte hängen.

Wenn die Updates im Modul auf Accountebene angestossen werden (was Sinn macht) und die Gerätedaten vor den Userdaten eingelesen werden, klappt es zumindest bei nur einem Gerät mit dem kombinierten Logfile.
Theoretisch...

Aktuell weder Smarthome noch FHEM vorhanden

justme1968

mir ist der session key jetzt zwei mal innerhalb von ein paar minuten abgelaufen. zumindest wenn er nicht verwendet wird.

die 3 monate stehen im expires für session_u, session_key hat kein expires.

ist aber auch egal. wenn man die werte alle stunde abfragt kann man auch einen neuen key anfordern.

ich bau mal ein modul das alle drei aufgaben (master,user und device) übernehmen kann. das muss nicht unbedingt auf drei getrennte module aufgeteilt werden.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

Zitat von: justme1968 am 05 Januar 2014, 22:42:26mir ist der session key jetzt zwei mal innerhalb von ein paar minuten abgelaufen. zumindest wenn er nicht verwendet wird.
die 3 monate stehen im expires für session_u, session_key hat kein expires.
ist aber auch egal. wenn man die werte alle stunde abfragt kann man auch einen neuen key anfordern.

Oops, stimmt. Das ist ja nur ein Session Cookie.
Wird dann wohl nach x Stunden Timeout ungültig, vorher wenn nicht benutzt.


Zitat von: justme1968 am 05 Januar 2014, 22:42:26ich bau mal ein modul das alle drei aufgaben (master,user und device) übernehmen kann. das muss nicht unbedingt auf drei getrennte module aufgeteilt werden.

Jepp, so war das in etwa gedacht.
Klappt meine Idee, Updates global über Master durchzuführen worin dann die User/Device Updates angestossen werden in FHEM?
Aktuell weder Smarthome noch FHEM vorhanden

justme1968

die session ist schon nach etwa 15 oder 20 minuten ungültg. aber wie gesagt kein problem.

ich muss mal schauen. ich glaube aber ganz so einfach ist es nicht. wenn man z.b. nur jede stunde pollt aber sich in der zeit aus welchem grund auch immer drei mal wiegt reicht die reihenfolge alleine nicht sondern man muss die werte wirklich verschachteln.

kannst du mir mal ein beispiel json für die device readings schicken? ich hab nur das alte modell der wage.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

#29
Zitat von: justme1968 am 06 Januar 2014, 00:23:55
die session ist schon nach etwa 15 oder 20 minuten ungültg. aber wie gesagt kein problem.

Hmm... Bei mir funktioniert so ein Code zumindest im Browser länger. Liegt wohl an den fehlenden Cookies.
Dann eben ein Logout nach jedem Lesen :)


Zitat von: justme1968 am 06 Januar 2014, 00:23:55ich muss mal schauen. ich glaube aber ganz so einfach ist es nicht. wenn man z.b. nur jede stunde pollt aber sich in der zeit aus welchem grund auch immer drei mal wiegt reicht die reihenfolge alleine nicht sondern man muss die werte wirklich verschachteln.

Stimmt. Also lieber sauber getrennte Logs.


Zitat von: justme1968 am 06 Januar 2014, 00:23:55kannst du mir mal ein beispiel json für die device readings schicken? ich hab nur das alte modell der wage.

Im Anhang!




Mir ist übrigens grade noch was aufgefallen:
Du hast über CHANGETIME die Timestamps für's Log auf den richtigen Wert aus den Daten geändert.
Irgedwo hast du da mit einem Array[i++] gearbeitet, wenn ich mich recht erinnere und ich hatte das in den sortierten Daten übernommen.
Solltest du das wieder verwenden wollen, teste es bitte darauf was passiert, wenn event-on-change-reading aktiviert ist.
In der Kombination läuft das bei mir komplett Amok da die nicht aktualisierten Werte zwar rausfallen, die Zeitstempel aber in der Reihenfolge der ursprünglichen Liste bleiben.



Nächtliche Grüsse,
Markus
Aktuell weder Smarthome noch FHEM vorhanden