[74_XiaomiBTLESens.pm] Xiaomi Bluetooth Sensoren FlowerSens/Thermometer

Begonnen von CoolTux, 11 Januar 2018, 15:42:45

Vorheriges Thema - Nächstes Thema

t1me2die

So ganz glücklich stimmt mich das leider noch nicht.
Zwar bekomme ich nun die Werte komfortable aus dem Scan, jedoch ist es viel mehr eine Glückssache, ob der scan das jeweilige Device gerade empfängt bzw. das Device aktuell sendet.

Viel zu oft endet die Routine mit einem Timeout, weil das Device im Scan einfach nicht gefunden wurde.

Aber hey, ich habe ganz viel über die einzelnen Module gelernt.
Wie man mit readingsSingleUpdate ein Reading schreibt (bisher kannte ich nur setreading  ;D), BlockingCall, BlockingKill, ...
Wie meine neue "Set" oder "Get" hinzufügt und bearbeitet, wie man ein Device wieder löscht usw.

Aktuell habe ich mir "bluepy" angeschaut, dieses wird in anderen Projekten verwendet, jedoch konnte ich bisher aus deren "Liste" meine Werte (18,8Grad und 73% Luftfeuchtigkeit) nicht finden.

root@raspberrypi:/usr/local/lib/python3.5/dist-packages/bluepy# python btle.py E7:2E:00:E2:74:D6
Connecting to: E7:2E:00:E2:74:D6, address type: public
Service <uuid=Generic Access handleStart=1 handleEnd=5> :
    Characteristic <Device Name>, hnd=0x2, supports READ
    -> 'LYWSD02'
    Characteristic <Appearance>, hnd=0x4, supports READ
    -> '\x00\x00'
Service <uuid=fef5 handleStart=25 handleEnd=44> :
    Characteristic <8082caa8-41a6-4021-91c6-56f9b954cc34>, hnd=0x1a, supports READ WRITE
    -> ''
    Characteristic <724249f0-5ec3-4b5f-8804-42345af08651>, hnd=0x1c, supports READ WRITE
    -> ''
    Characteristic <6c53db25-47a1-45fe-a022-7c92fb334fd4>, hnd=0x1e, supports READ
    -> ''
    Characteristic <9d84b9a3-000c-49d8-9183-855b673fda31>, hnd=0x20, supports READ WRITE
    -> ''
    Characteristic <457871e8-d516-4ca1-9116-57d0b17b9cb2>, hnd=0x22, supports READ WRITE NO RESPONSE WRITE
    -> ''
    Characteristic <5f78df94-798c-46f5-990a-b3eb6a065c88>, hnd=0x24, supports NOTIFY READ
    -> '\x00'
    Characteristic <64b4e8b5-0de5-401b-a21d-acc8db3b913a>, hnd=0x27, supports READ
    -> '\r'
    Characteristic <42c3dfdd-77be-4d9c-8454-8f875267fb3b>, hnd=0x29, supports READ
    -> '\xf4\x00'
    Characteristic <b7de1eea-823d-43bb-a3af-c4903dfce23c>, hnd=0x2b, supports READ
    -> '\x17\x00'
Service <uuid=fe95 handleStart=97 handleEnd=114> :
    Characteristic <0001>, hnd=0x62, supports NOTIFY WRITE
    Characteristic <0002>, hnd=0x65, supports READ
    -> '[\x04'
    Characteristic <0004>, hnd=0x67, supports READ
    -> '\xf7.\\R\xa6OFl\x1b/'
    Characteristic <0005>, hnd=0x69, supports NOTIFY WRITE
    Characteristic <0010>, hnd=0x6c, supports WRITE
    Characteristic <0013>, hnd=0x6e, supports READ WRITE
    -> '\xc6b\x01\x08\xba#Xm\x1ep\x1c\xe2)\xf8\xae\xc1\x90F\xe5\xc1'
    Characteristic <0014>, hnd=0x70, supports READ
    -> '\xeb\x1e\xe0\xbd\xe9\x96\x1eUW\xa6\x12\xc6'
Service <uuid=Generic Attribute handleStart=6 handleEnd=9> :
    Characteristic <Service Changed>, hnd=0x7, supports READ INDICATE
    -> '\x01\x00\xff\xff'
Service <uuid=ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6 handleStart=60 handleEnd=90> :
    Characteristic <ebe0ccb7-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x3d, supports READ WRITE NO RESPONSE WRITE
    -> '\xe1d\xa8]\x02'
    Characteristic <ebe0ccb9-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x3f, supports READ
    -> '\xf7\x01\x00\x00\xf8\x01\x00\x00'
    Characteristic <ebe0ccba-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x41, supports READ WRITE NO RESPONSE WRITE
    -> '\xb5\x01\x00\x00'
    Characteristic <ebe0ccbb-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x43, supports READ
    -> '\x00\x00\x00\x00\xa0\xdbS]\xf1\n;\xe6\n;\x00\x00'
    Characteristic <ebe0ccbc-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x45, supports NOTIFY READ
    -> ''
    Characteristic <ebe0ccbe-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x48, supports READ WRITE NO RESPONSE WRITE
    -> '\xff'
    Characteristic <ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x4a, supports NOTIFY READ
    -> ''
    Characteristic <ebe0ccc2-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x4d, supports READ WRITE NO RESPONSE WRITE
    -> '\x9b'
    Characteristic <ebe0ccc3-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x4f, supports READ WRITE NO RESPONSE WRITE
    -> '\x00\xff\x00\xff\x00\xff'
    Characteristic <ebe0ccc4-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x51, supports READ
    -> '%'
    Characteristic <ebe0ccc8-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x53, supports WRITE NO RESPONSE WRITE
    Characteristic <ebe0ccd2-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x55, supports READ WRITE NO RESPONSE WRITE
    -> '\n7198238426'
    Characteristic <ebe0ccd3-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x57, supports READ WRITE NO RESPONSE WRITE
    -> '\x00'
    Characteristic <ebe0ccd4-7a0a-4b0c-8a1a-6ff2997da3a6>, hnd=0x59, supports WRITE NO RESPONSE WRITE
Service <uuid=2b43ccc0-2506-415c-a16c-e4cc5f52ef78 handleStart=45 handleEnd=59> :
    Characteristic <2b43ccc1-2506-415c-a16c-e4cc5f52ef78>, hnd=0x2e, supports READ
    -> '\xfe\xfe\xfe\xfe\xfe\xfe'
    Characteristic <2b43ccc2-2506-415c-a16c-e4cc5f52ef78>, hnd=0x30, supports NOTIFY WRITE NO RESPONSE WRITE
    Characteristic <2b43ccc3-2506-415c-a16c-e4cc5f52ef78>, hnd=0x33, supports WRITE NO RESPONSE WRITE
    Characteristic <2b43ccc4-2506-415c-a16c-e4cc5f52ef78>, hnd=0x35, supports WRITE NO RESPONSE WRITE
    Characteristic <2b43ccc5-2506-415c-a16c-e4cc5f52ef78>, hnd=0x37, supports NOTIFY
    Characteristic <2b43ccc6-2506-415c-a16c-e4cc5f52ef78>, hnd=0x3a, supports WRITE NO RESPONSE WRITE
Service <uuid=Device Information handleStart=10 handleEnd=24> :
    Characteristic <Manufacturer Name String>, hnd=0xb, supports READ
    -> 'miaomiaoce.com'
    Characteristic <Model Number String>, hnd=0xd, supports READ
    -> 'LYWSD02'
    Characteristic <Serial Number String>, hnd=0xf, supports READ
    -> 'F200FFFF036430515D'
    Characteristic <Hardware Revision String>, hnd=0x11, supports READ
    -> 'F2_WF'
    Characteristic <Firmware Revision String>, hnd=0x13, supports READ
    -> '1.1.2_0042'
    Characteristic <Software Revision String>, hnd=0x15, supports READ
    -> '0042'
    Characteristic <System ID>, hnd=0x17, supports READ
    -> '\xd6t\xe2\x00.\xe7'
Service <uuid=fafafa00-fafa-fafa-fafa-fafafafafafa handleStart=94 handleEnd=96> :
    Characteristic <fafafa01-fafa-fafa-fafa-fafafafafafa>, hnd=0x5f, supports READ WRITE NO RESPONSE WRITE
    -> ''
Service <uuid=aaaaaaa0-aaaa-aaaa-aaaa-aaaaaaaaaaaa handleStart=91 handleEnd=93> :
    Characteristic <aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa>, hnd=0x5c, supports READ WRITE NO RESPONSE WRITE
    -> ''



Falls du sie findest, lass es mich wissen, denn der Abruf via bluepy ist deutlich komfortable und auch viel performanter.

Gruß

CoolTux

Hallo,

setreading ist ein FHEM Befehl und ruft auch nur die Perl Routine readingsSingleUpdate auf :-)
Du kannst Dir ja die fhem.pl an schauen. Da sind die Routinen alle drin.

bluepy ruft meines Wissens auch nur gatttool auf.


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

t1me2die

Moin,

wieder was dazu gelernt  :)
Also das "Modul" funktioniert soweit, mehr oder weniger  ;D
Wobei mir das auslesen der Werte über bluetoothctl wirklich gar nicht zusagt.
Die Uhrzeit kann ich "komfortable" per gatttool und einem handle auslesen.
Solange ich aber nicht weiß, ob ich noch auf einen anderen Weg an meine Werte komme, muss das so erstmal laufen.
Anfangs stand ich auch vor dem Problem, dass der User fhem keine Berechtigung hatte um "bluetoothctl" auszuführen...
Nun muss ich aber erstmal das Modul aufräumen. Viele Log-Meldungen habe ich mir gebastelt und an einigen Stellen weiß ich schon selber, dass das alles nicht ganz rund ist.
Ich bin aber immer etwas ungeduldig und möchte schnell irgendein Resultat sehen, dass verleitet leider zu "dummen" Quellcode... Muss man üben  :)
Ansonsten muss ich mal wirklich das DevelopmentModuleIntro loben, ziemlich tolle Funktionen, die man Standardmäßig nutzen kann!


Internals:
   BTMAC      E7:2E:00:E2:74:D6
   CFGFN     
   DEF        E7:2E:00:E2:74:D6
   FUUID      5da96bdb-f33f-5bc8-2f02-2c9317f0abd6372b
   INTERVAL   300
   NAME       wz_Xiaomi_eInk
   NOTIFYDEV  global,wz_Xiaomi_eInk
   NR         2055
   NTFY_ORDER 50-wz_Xiaomi_eInk
   STATE      T: 18.8 H: 74
   TYPE       XiaomiEInk
   VERSION    v0.0.2
   loglevel   4
   READINGS:
     2019-10-18 09:43:08   clock           18.10.2019-09.43.10
     2019-10-18 09:44:59   humidity        74
     2019-10-18 09:44:59   job             done
     2019-10-18 09:38:52   model           LYWSD02
     2019-10-18 09:44:59   state           T: 18.8 H: 74
     2019-10-18 09:40:05   temperature     18.8
   helper:
Attributes:
   room       XiaomiEInk


PS.: Falls jemand einen Xiaomi LYWSD02 (eInk Display mit Humidity + Temp + Clock) haben sollte und das Modul testen möchte, kann er sich gerne bei mir melden  :)

Gruß
Mathze

t1me2die

Mal eine kurze Rückmeldung meinerseits.
Etwas Zeit ist vergangen, der Xiaomi ClearGrass Sensor läuft gewohnt gut.
Temperatur und Luftfeuchtigkeit passen.
Für BatteryPercent lege ich meine Hand nicht ins Feuer (bei mir könnte es passen).

Ich denke du kannst es ins SVN einchecken, falls noch nicht geschehen (ich hab es ja nicht so mit regelmäßigen Updates  ;D )

Gruß
Mathze

CoolTux

Zitat von: t1me2die am 04 November 2019, 13:19:35
Mal eine kurze Rückmeldung meinerseits.
Etwas Zeit ist vergangen, der Xiaomi ClearGrass Sensor läuft gewohnt gut.
Temperatur und Luftfeuchtigkeit passen.
Für BatteryPercent lege ich meine Hand nicht ins Feuer (bei mir könnte es passen).

Ich denke du kannst es ins SVN einchecken, falls noch nicht geschehen (ich hab es ja nicht so mit regelmäßigen Updates  ;D )

Gruß
Mathze

Du machst mir ja Spaß  ;D
Erstmal ist es ein komplett neues/anderes Modul, dazu kommt das es DEIN Modul ist.
Vorgehensweise wäre also. Neuen Thread und da Dein Modul vorstellen, 2-3 Leute sollten es testen und entsprechendes Feedback geben und Du musst zu mindest eine englische Commandref erstellen.
Zum Abschluß schaut ein erfahrender Developer noch einmal über den Code.
Dann kannst Du einchecken.

Ich würde Dir empfehlen das Du erstmal Dein Modul in einem separaten Thread vor stellst. Kannst ja das Modul als Anhang anhängen oder ein Verweis auf eine entsprechende Seite (Github oder so) machen.
Gerne schaue ich dann schon mal über den Code.

Das alles sollte Dich aber bitte jetzt nicht von weiteren Schritten ab halten. Ich finde es bemerkenswert und sehr toll was Du hier in kurzer Zeit geschaffen hast.
Kannst ja in diesem Thread dann ein Link auf DEINEN eigenen neuen Thread setzen.


Grüße
Leon
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

t1me2die

Moin Leon,

es geht gar nicht um das Xiaomi LYWSD02, sondern um den Xiaomi ClearGrass, den du ja in deinem Modul integriert hast.
Ich wollte Dir nur noch einmal ein Feedback geben, dass der ClearGrass mit deiner letzten Version aus dem Github (https://github.com/fhem/XiaomiBTLESens/blob/devel/74_XiaomiBTLESens.pm) gut läuft und die Daten (Temp + Hum) korrekt in FHEM dargestellt werden.

Gruß
Mathze

CoolTux

Zitat von: t1me2die am 04 November 2019, 14:51:54
Moin Leon,

es geht gar nicht um das Xiaomi LYWSD02, sondern um den Xiaomi ClearGrass, den du ja in deinem Modul integriert hast.
Ich wollte Dir nur noch einmal ein Feedback geben, dass der ClearGrass mit deiner letzten Version aus dem Github (https://github.com/fhem/XiaomiBTLESens/blob/devel/74_XiaomiBTLESens.pm) gut läuft und die Daten (Temp + Hum) korrekt in FHEM dargestellt werden.

Gruß
Mathze

Ups, Sorry mein Fehler. Alles klar. Ich danke Dir.


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

Holzlenkrad

Ich habe weiterhin das Problem, dass nach einiger Nutzungsdauer (mal mehrere Wochen, jetzt nach nur 2 Tagen), die Kommunikation zwischen Thermometer und Modul nicht mehr funktioniert.

Fehlermeldung ist dann: no data response
Im Logfile steht sonst nichts. Das Thermometer und mein Raspberry Pi 3 sind im selben Raum.

Das Problem kann ich jedes Mal mit einem Neustart von Linux beheben.


Nun interessiert mich ja nun generell mal, wie ich das Problem beheben kann? Und falls es da keine einfach Lösung gibt, gibt es eine Möglichkeit die Bluetooth Schnittstelle (automatisiert, regelmäßig) neuzustarten, damit ich nicht jedes Mal den Raspberry Pi auf dem ja nun eine ganze Menge läuft rebooten muss?
Danke :) 

Holzlenkrad

Also ein sudo invoke-rc.d bluetooth restart fixt es vorübergehend schon mal.
Werde das mal als täglichen Chronjob einrichten?

charlie71

#894
Liebe Xiaomi Flower Sensor Nutzer,

ich schlage für das Modul folgende 2 Patches vor:
1) Das Modul prüft mittels "ps ax" die laufenden Prozesse am ssh host. Das schlägt aber bei kleinen Linux Accesspoints fehl. (mein Router liefert bei "ps ax" nur die Fehlermeldung "ps: unrecognized option: a", wenn man den Prozessstatus nur mit "ps" abfragt klappt es auch auf kleinen Routern)
Hier schlage ich ein optionales Attribut vor das das "ps" command enthällt.
2) Wenn eines Sensorabfrage nicht klappt (schlechte Verbindung) kommt es immer wieder vor, dass im fhem log nicht zuordenbare Fehlermeldung vom Modul eingetragen werden zB "connect: Device or resource busy (16)"
(Ursache dafür ist dass beim qx der sdterr ausgewertet wird).
Hier fehlt es sauberes Fehlerhandling

ich habe für Beides einen Patch gebaut.
Bitte in die nächste Modulversion einbauen
lG
Charlie71

CoolTux

Hallo Charlie,

Vielen Dank. Ich schaue es mir die Tage sehr gerne an.


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

Jamo

Hi Charlie, Cooltux,
ich habe den Patch mal eingespielt, aber ich bekomme im state meiner Blumen Sensoren nur noch ein error - weiss nicht was das ist, ich habs nicht debugged weil ich jetzt erstmal in Urlaub bin bis Januar. Aber die 'connect error' etc Fehlermeldungen sind in der Tat verschwunden.... :-)

Danke, frohe Weihnachten und ein schönes neues Jahr.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

charlie71

Hallo Jamo,

vielen Dank für den Hinweis, ich habe tatsächlich einen kleinen Fehler eingebaut  :'(
Ich hab den Patch schon aktualisiert.

lg
Charlie71

CoolTux

Hallo Charlie,

Sauberer Patch, vielen lieben Dank für die gute Arbeit. Ich teste das die Tage noch und würde mich dann noch mal melden.


Grüße
Marko
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

Jamo

Gerade nochmal getestet und für gut befunden! Funktioniert jetzt. Danke !
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack