Fitbit One als PRESENCE tracker

Begonnen von mkriegl, 16 Dezember 2014, 21:59:14

Vorheriges Thema - Nächstes Thema

mkriegl

Ich habe vor einiger Zeit begonnen fhem auf meiner Fritzbox zu nutzen. Lediglich aber mit einfachem Auslesen meiner Heizkörper Regler. Jetzt bin ich auf einen Raspberry umgestiegen und wollte ein wenig mehr machen. Mein erstes Projekt ist natürlich mit meiner geringen Erfahrung gleich eine Hausnummer.
Ich habe mir auf dem Raspi mal das galileo Projekt installiert. Damit kann ich durch den USB 4.0 dongle meinen tracker finden, auslesen und die Daten hochladen. Ich würde das Program jetzt allerdings ungern über einen cron mehrfach laufen lassen. Lieber wäre is mir eine Abfrage via fhem ein zu binden.
Idee sieht etwa so aus:

  • alle 10 sek abfragen ob der Tracker gefunden wurde
  • falls der Tracker gefunden wurde kann die Abfrage runtergefahren werden - etwa alle 60 sek
  • einmal pro Stunde soll der Tracker auch synchronisiert werden, da dieser Prozess auch länger dauert als nur die Suche
  • wird der Tracker nicht mehr gefunden geht es zurück auf Los

Hilfe wäre in alle Richtungen willkommen. Ab Besten natürlich zuerst ne Idee wie ich damit starten könnte. Galileo starte ich entsprechend mit Parametern über die Shell, allerdings bekomme ich die Ausgabe direkt auf den Monitor - Datei geht aber wohl auch.

Gruß .. Maxl

mkriegl

Hab am Wochenende mal bisschen rumgebastelt und habe mittlerweile eine Erkennung via PRESENCE und schalte damit entsprechend zeit verzögert über den watchdog das WLAN ein und aus. Meine Programmier Kenntnisse sind nicht die Besten, deswegen bin ich für Feedback gerne offen.

In fhem wird der Fitbit Tracker mit PRESENCE definiert. Entsprechend gibt es dazu einen  Shell Aufruf, der 1 oder 0 zurück geben muss. Das galileo Programm zum Auslesen des Trackers ist in Python und befindet sich in der aufgerufenen Lib. Das kurze Skript presence.py mit den wichtigsten Funktionen habe ich selbst erstellt. Die Abfrage findet bei Abwesenheit alle 10Sek, bei Anwesenheit alle 60Sek statt. Danke dabei schon mal an das PRESENCE Modul

define Fitbit PRESENCE shellscript "sudo /usr/bin/python /usr/local/lib/python2.7/dist-packages/galileo/presence.py" 10 60

Das Skript sucht nach Trackern, wenn meine MAC Adresse gefunden wurde wird der Rückgabewert auf 1 gesetzt (sollte entsprechend noch um weitere Tracker erweitert werden können, allerdings mache ich hier schon einen BREAK, da mir der eine meine reicht). Falls die MAC Adresse nicht überein stimmt geht der Rückgabe Wert auf 0 - zur Sicherheit. Wegen Abwesenheit und kein Tracker gefunden wird ist der Wert initial natürlich auf 1.

from galileo.dongle import FitBitDongle
from galileo.tracker import FitbitClient
import uuid

dongle = FitBitDongle()
dongle.setup()
fitbit = FitbitClient(dongle)
FitBitUUID = uuid.UUID('{ADAB0000-6E7D-4601-BDA2-BFFAA68956BA}')
presence = 0

for tracker in fitbit.discover(FitBitUUID):
    if tracker.id == [XX, XX, XX, X, XX, XX]:
       presence = 1
       break
    else:
       presence = 0
print presence


Trotz Anwesenheit habe ich ab und zu einen toggle auf abwesend feststellen können, deswegen habe ich im watchdog den Wert für WLAN Ausschalten pauschal mal auf 30 Sek gesetzt. Einschalten ist auf 15 Sek, allerdings habe ich noch keine Test wie es sich in dieser Richtung auswirkt - kann aber denke mal auch Null sein.

Momentan fehlt mir jetzt noch:
- das komplette auslesen des Trackers, also galileo bei Anwesenheit in bestimmten Abständen einmal komplett ausführen.
- YAMAHA Receiver einschalten wenn ich längere Zeit Abwesend war und dann Anwesend (unnötige Schaltvorgänge vermeiden)
- HM Heizungssteuerung: Heizung in Nachtmodus (absent), Auto (present) - würde hierbei aber gerne die Schaltung umgehen können für Vorheizen auf dem Heimweg

UliM

Hi,
klingt interessant.
Kannst Du mal bitte ine paar links posten, z.B. welcher tracker, wo gibts den und was kostet der, welches Galileo-Projekt, idealerweise link zu einer Installationsanleitung usw.
Danke+Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

rretsiem

#3
Hi,

klingt wirklich interessant, kannst du was zur Reichweite sagen? Ich habe einen Polar Loop der ebenfalls Bluetooth 4.0 LE unterstützt und mal ein wenig mit dem hcitool gespielt aber unterschiedliche Ergebnisse zur Erreichbarkeit gesehen.
Hast du mehrere Bluetooth Dongles in der Wohnung die du "scannen" lässt oder reicht bei dir ein Dongle um die kompl. Wohnung abzudecken?

@UliM:
Ich denke es geht um das Projekt hier: https://bitbucket.org/benallard/galileo
Die Fitbit-Tracker sind eigentlich weit verbreitet und z.B. bei Amazon erhältlich. Der Flex ist am weitesten verbreiet, der Charge HR wohl das Gremium-Model im Moment. Hier mal eine Übersicht

mkriegl

Sorry, irgendwie habe ich keine Benachrichtigung beommen. Ja, es geht um das Projekt von Banallard. Einfach mal nach "galileo fitbit" googeln, da gibt es installations hinweise und auch die libary.
ich bin in einer recht kleinen Wohnung (52qm). Den BT Dongle habe ich recht mittig positioniert. Empfang geht dabei bis zur Haustüre Mit dem Original Dongle. ich bin noch in der Testphase, aber wenn ich nah genug an der Haustüre stehe erkennt er mich. Allerdings habe ich noch kleine Aussetzer Z.b. nachts. Letzte Nacht waren es 4. Da er bei Abwesenheit aber nach 10 sek schon wieder sucht zeigt er mich sofort wieder anwesend. Ich bin am überlegen dies mit einem 15sek watchdog noch zu umgehen, verzögert aber die gesamte Schaltung.
Die anderen genannten Punkte habe ich auch bereits umgesetzt. Bei absent geht nach 2 min Heizung und WLAN aus. Bei Present geht alles wieder an. Mein Receiver geht auch an wenn ich länger als 30min absent war. Außerdem wird bei present der Tracker alle 2h komplett ausgelesen.
Für größere Wohnungen oder Häuser müsste man sich mal schlau machen wie es mit einem anderen leistungsstärkeren BT Dongel ausschaut. Außerdem weiß ich auch noch das bei einem normalen Start von galileo die Empfangsleistung zurück gegeben wird. Vielleicht kann man hier mehrere Dongles einsetzen und entsprechend genauer die Position bestimmen ( Stockwerk übergreifend). Ist für mich allerdings momentan nicht notwendig und mir fehlt das entsprechende Haus dazu :-).

robert.heinze

Hallo Maxl,

mich würde interessieren, ob du schon weiter gekommen bist? Kannst du aus dem dump schon mehr Parameter auslesen?
Ich habe Probleme mit dem Charge HR und Galileo 0.4.3. Nr mit der 0.5dev läuft es ...

Würde mich echt interessieren, da ich ähnliches vorhabe, ich jedoch auch den Puls brauche!
Danke!
Gruß aus Wien

robert.heinze

noch etwas, wie schaut die Syntax deiner TrackerID aus? Komme nicht zurecht damit ...

robert.heinze

Danke für die schnelle Antwort. Vl. ist es ein Empfangsproblem, dass du ztw. außerhalb des Empfangsbereiches bist von deinem RPi mit dem Tracker. Wie gibst du die Syntax ein? Byte für Byte unter "AE", "34", ...?
Danke!

mkriegl

Hi Robert
ich glaube da kann ich dir nicht weiter helfen. Da müsstest du dich eher an das galileo Projekt wenden. Ich rufe nur das Program auf und breche ab wenn die TrackerID meines Trackers gefunden wurde. Das Skript gibt dann eine 1 an fhem zurück und sieht mich somit als present an.
Die Daten selbst lasse ich nur alle 2h durch einen kompletten Programmdurchlauf synchronisieren.
Momentan funktioniert das ganze bei mir auch nicht ganz. Gerne setzt er mich mitten in der Nacht auf abwesend und bleibt in diesem Status. Ich bin noch nicht darauf gekommen ob es an dem Program liegt oder mein Tracker durch die viele Abfragerei Probleme macht. Seither habe ich mich auch nicht weiter darum gekümmert
Gruß Maxl

define Fitbit PRESENCE shellscript "sudo /usr/bin/python /usr/local/lib/python2.7/dist-packages/galileo/presence.py" 10 300
define FitbitSync at +*02:00:00 {if (Value("Fitbit") eq "present") {system ("/usr/local/bin/galileo &")}}

mkriegl

#9
Hoppala,

Wollte noch den Quellcode hinzufügen hab aber den falschen Post gelöscht.
Welche Syntax meinst du. Wenn galileo startet sucht er tracker. Bei mir hatte ich die MAC Adresse meines Trackers zurückgegeben - zwar in dezimal, war mir aber egal. Wenn der Wert überein stimmt breche ich ab und gebe eine 1 zurück. Das heißt für fhem present. Auslesen des Trackers findet dann nicht mehr statt. Dafür habe ich den zweiten Aufruf alle 2h wenn ich anwesend bin.

robert.heinze

In deinem Post im März schreibst du presence.ly mit ...

for tracker in fitbit.discover(FitBitUUID):
    if tracker.id == [XX, XX, XX, X, XX, XX]:

und das XX war meine Frage.
Danke dir!
Liebe Grüße Robert

mkriegl

Ah jetzt verstehe ich. Ja, das ist die MAC Adresse als Array. Ich habe sie mir zu Beginn einfach mal ausgeben lassen. Interessanter weiße war sie in dezimal und nicht hex. Hat mich weiterhin aber nicht interessiert da ich ja eh nur abgleiche ob die richtige MAC gefunden wurde. Sonst springt er auf jeden Tracker an

Markus M.

Aktuell weder Smarthome noch FHEM vorhanden

robert.heinze

weil ich auch den puls brauche!
Liebe Grüße Robert

onkel-tobi

Hallo zusammen,

vielleicht stehe ich gerade auf dem Schlauch, aber wie bekomme ich denn die UUID heraus?
MAC Adresse ist kein Problem, aber die UUID?

Gruß,
Tobi