[74_GardenaBLEDevice] Neues Modul für Gardena Bluetooth Geräte

Begonnen von ambiman, 21 Juni 2021, 22:41:57

Vorheriges Thema - Nächstes Thema

ambiman

Hallo zusammen,

hier ein erstes experimentelles Modul für die neuen Gardena Bluetooth Geräte.
Aktuell wird lediglich das Water Control Ventil (https://www.gardena.com/de/produkte/bewasserung/bewasserungssteuerung/bewasserungssteuerung-bluetooth/970481101/) unterstützt aber
das Modul ist erweiterbar.

Das Modul findet ihr hier: https://github.com/ambiman/fhem/blob/main/74_GardenaBLEDevice.pm

1) Gerät erstellen

Erstellt wird das Device wie folgt:

define <name> GardenaBLEDevice <BTMAC> <MODEL>

bspw. define Ventil GardenaBLEDevice F8:24:41:AA:BB:CC watercontrol

Die MAC des Ventils könnt ihr üblicherweise mittels bluetoothctl wie folgt ermitteln.
Wie suchen nach einem Gerät welches Water Control heißt.


root@system:~# bluetoothctl
[bluetooth]# scan on
(nun einige Zeit scannen lassen)
[bluetooth]# devices
Device 60:98:66:AA:BB:CC Water Control
(sollte keine Device mit dem Namen Water Control auftauchen, dann einfach mittels connect <ADDRESSE aus den Devices> verbinden und dann sollte man eine Chracteristic names 'Name' und Water Control finden, somit habt ihr die MAC-Adresse ermittelt)


2) Unterstütze Set Funktionen:

on/off: Bei "on" Öffnen des Ventils für die Dauer des DEFAULT Werts (siehe Reading DEFAULT_ON_TIME_FHEM und anpassbar über das gleichnamige Attribut).
on-for-timer: Öffnen des Ventils für X Sekunden (min. 5 Sekunden max. 18 Stunden)
default-watering-time: Die Zeit in Sekunden welche standardmäßig und dauerhaft im Ventil gespeichert wird und auch beim manuellen "Kopfdruck" am Ventil angewendet wird. Nicht zu verwechseln mit der DEFAULT_ON_TIME_FHEM - diese ist unabhängig hiervon und wird bei einem set ... on einmalig gesetzt.
synchronizeClock: Synchronisation der Uhr mit der aktuellen Systemzeit (lokale Zeitzone - kein UTC!)
setSchedule1-3: Setzen der einzelnen (maximal 3) Bewässerungszeitpläne im Format [Mon,Tue,Wed,Thu,Fri,Sat,Sun] HH:MM:SS [range 5-28740] (Sekunden)
deleteSchedule1-3: Löschen einzelner Zeitpläne
deleteAllSchedules: Löschen aller Zeitpläne
resetGattCount: Zurücksetzen des GATT Kommandozählers

3) Unterstütze Get Funktionen:

ctrlunitstate: Abfrage ob das Bedienteil aktuell installiert ist
remainingTime: Verbleibende Bewässerungsdauer
stateRequest: Status ad-hoc abfragen

4) Attribute:

Neben den Standardattributen (disable etc.) werden folgende Attribute unterstützt:

interval: Interval für Statusrequests in Sekunden (Standard: 300 sek. / minimal: 30sek.)
default-on-time-fhem: Standardwert in Sekunden für die Bewässerung bei set on; Anpassung des Werts im Reading DEFAULT_ON_TIME_FHEM
hciDevice: Bluetooth Adapter Interface (bspw.: hci0,hci1,hci2 / Standard: hci0)
blockingCallLoglevel: Loglevel für ext. gatttool (bspw.: 1 2,3,4,5)
GATTtimeout: Maximale Zeit (in Sekunden) für die Ausführung einzelner GATT Befehle (Standardwert: 20 Sekunden)
btSecurityLevel: Bluetooth Securitylevel (low, medium) für gatttool - Standard ist medium
maxErrorCount: Maximale Anzahl fehlerhafter GATT Befehle bevor sich das Modul automatisch selbst deaktiviert
sleepBetweenGATTCmds: Sleeps (1-5 Sekunden) zwischen den einzelnen GATT Befehlen. Dies sorgt für eine stabilere Verbindung zum Ventil.

Ich hoffe es hilft jemanden und ich bin für etwaiges Feedback immer offen.

Viele Grüße,

ambiman

Isnogud0815

Hallo ambiman,

bin über dein Modul gestolpert, weil ich auch mein Gardena Water Control in FHEM einbinden möchte.
Bist du da noch aktiv dabei, ich hab ein paar Fragen/Probleme mit dem Modul und es wäre toll, wenn ich/wir das Teil zum Laufen bringen könnten.

Gruß
Isno

Stepho

Ich bin ebenfalls sehr an dem Modul interessiert, bekomme es aber auch leider nicht zum laufen....

Ich erhalte beim Versuch, mit dem Gerät zu kommunizieren immer nur ,,requesting", dann passiert nichts mehr. Nach einer Zeit erhalte ich die Fehlermeldung: ,, The BlockingCall Process terminated unexpectedly". Es scheint also nichts über Bluetooth vom Ventil zurückzukommen.

Welche Vorbedingungen müssen erfüllt sein, muss ich das BLE devices vorher mit dem raspi koppeln, oder was hast du bei Dir gemacht?

Herzlichen Dank für eine kurze Info!

ambiman

#3
Hallo zusammen,

ja, ich nutze das Modul selbst aktiv zur Bewässerung mit zwei BLE Ventilen.

Zitat von: Stepho am 09 Juli 2022, 15:47:18
Ich bin ebenfalls sehr an dem Modul interessiert, bekomme es aber auch leider nicht zum laufen....

Ich erhalte beim Versuch, mit dem Gerät zu kommunizieren immer nur ,,requesting", dann passiert nichts mehr. Nach einer Zeit erhalte ich die Fehlermeldung: ,, The BlockingCall Process terminated unexpectedly". Es scheint also nichts über Bluetooth vom Ventil zurückzukommen.

Welche Vorbedingungen müssen erfüllt sein, muss ich das BLE devices vorher mit dem raspi koppeln, oder was hast du bei Dir gemacht?

Herzlichen Dank für eine kurze Info!

Nein, das Modul muss nicht gepaired werden. Hast du es in FHEM mittels define und der MAC Adresse angelegt ? Ist das hcidevice (kann über das entsprechende Attribut beeinflusst werden) korekt gesetzt - der Standard ist hci0. Du kannst dir mittels "hciconfig -a" alle BT Adapter anzeigen lassen.

Weiterhin könntest du das verbose Level des Gerätes (mit dem gleichnamigen Attribut) hochdrehen - bspw. auf 5 und hier einmal den Output aus dem Logfile einstellen.

@Isnogud0815: Funktioniert das Modul bei dir wie erwartet oder hast du die gleichen Probleme?

VG,

ambiman

Stepho

Vielen Dank für Deine Antwort!

Kriege es aber leider noch nicht hin.

JSON

Ich bekomme immer:

Undefined subroutine &main::encode_json called at ./FHEM/74_GardenaBLEDevice.pm line 520.

JSON ist aus meiner Sicht installiert, habe

folgendes vorher gemacht:

sudo cpan install JSON
sudo apt-get install libjson-perl
sudo apt-get install libjson-xs-perl






Stepho

Jetzt habe ich im Modul

import JSON:XS

geändert in

use JSON:XS

-----------------

Jetzt scheint er das encode_json und decode_json zu finden, aber es gibt gleich das nächste Problem:

2022.07.17 18:54:37 3: Gardena_BLE (Ventil) - ExecGatttool_Done last gatt error: connect error: Function not implemented (38)


Die Meldung kommt alle paar Sekunden, und der FHEM Status des Devices ist "error"


X-Byte

Wollte das neu angeschaffte Gardena Bluetooth Ventil in FHEM integrieren.

Ich bekomme das Modul leider gar nicht erst geladen, muss gestehen dass ich auch bisher keine genutzt hatte, was nicht bereits im FHEM repository enthalten war.
Ich habe 74_GardenaBLEDevice.pm nach /opt/fhem/FHEM geladen und erst mit "reload 74_GardenaBLEDevice.pm" und "reload 74_GardenaBLEDevice" im laufenden FHEM Betrieb zu laden, aber die anschließende Definition eines Gardena_BLE device schlug fehl mit "Unknown module Gardena_BLE". Auch ein "shutdown restart" von FHEM änderte nichts an der Lage.

Im FHEM log findet sich folgendes, was aber wohl nur Warnings und keine Errors sind:
2022.07.22 23:55:01 1: PERL WARNING: %Gardena_BLE_Models{...} in scalar context better written as $Gardena_BLE_Models{...} at ./FHEM/74_GardenaBLEDevice.pm line 95.
2022.07.22 23:55:01 1: PERL WARNING: %Gardena_BLE_Set_Opts{"all"} in scalar context better written as $Gardena_BLE_Set_Opts{"all"} at ./FHEM/74_GardenaBLEDevice.pm line 114.
2022.07.22 23:55:01 1: PERL WARNING: %Gardena_BLE_Set_Opts{...} in scalar context better written as $Gardena_BLE_Set_Opts{...} at ./FHEM/74_GardenaBLEDevice.pm line 114.
2022.07.22 23:55:01 1: PERL WARNING: %Gardena_BLE_Get_Opts{"all"} in scalar context better written as $Gardena_BLE_Get_Opts{"all"} at ./FHEM/74_GardenaBLEDevice.pm line 118.
2022.07.22 23:55:01 1: PERL WARNING: %Gardena_BLE_Get_Opts{...} in scalar context better written as $Gardena_BLE_Get_Opts{...} at ./FHEM/74_GardenaBLEDevice.pm line 118.


Eine kleine Starthilfe wäre sehr willkommen.

X-Byte

OK, Antwort an mich selbst: Es heißt define GardenaBLEDevice und nicht Gardena_BLE

Ich konnte es also erfolgreich anlegen, erhalte aber als state nur "error" und lastGattError "connect error".

Bei einem bluetoothctl / scan on / devices taucht die MAC zwar auf, aber "water control" wird nicht als text dahinter angezeigt.
Darf das Ventil möglicherweise nicht zuvor mit einem Handy in der Gardena Bluetooh App gekoppelt werden?
Mit einem zweiten Handy finde kann ich das Ventil mit der Gardena Bluetooth nämlich auch nicht finden/hinzufügen, bei einem BLE Scan auf dem Handy taucht die MAC auf, aber im Gegensatz zum ersten Handy ohne "water control" text.

X-Byte

Habe mir noch ein zweites Gardena Bluetooth Ventil zugelegt, das noch komplett jungfräulich (ungepaart) ist und damit in FHEM ein GardenaBLEDevice definiert. Die MAC konnte vorher beim Scan gefunden werden, allerdings auch hier ohne Water Control als Text.

Mit dem bisher ungepaarten Ventil komme ich etwas weiter, wenn auch nicht viel. Wenigstens werden hier ein paar mehr Readings angezeigt als lastGattError und state:

Readings
battery: low
batteryLevel: 0%
ctrlunitstate: removed
deviceTime: Tue Mar 20 08:34:18 2091
lastGattError: connect error
remainingTime: 0 seconds
state: error


Wobei die Control unit nach der Bluetooth Verbindung mittlerweile verbunden ist, der Status dazu ändert sich nicht. Die deviceTime wurde wohl auch nie gesetzt.
Und auch sonst reagiert es auf keine der Set/Get Befehle mit einer anderen Meldung außer connect error.

Andere BLE Geräte, wie z.B. 74_XiaomiBTLESens (Temperatursensor) funktionieren übrigens problemlos, so dass ich ein Rapsberry Pi/OS Problem eher ausschließen würde.

ambiman

Hallo X-Byte,

ich könnte mir vorstellen, das das Gerät vielleicht eine neuere Firmware und damit andere BLE Characteristics im Vergleich zu meinem Ventil hat.

Mein Ventil hat die Firmware 1.7.7.17 (habe ich per GardenaBLE App ermittelt) - wie sieht es bei dir aus ?

Auch als Antwort an @Stepho: Wichtig ist, das ihr bei euren Tests die GardenaBLE App NICHT offen habt! Das Ventil kann lediglich eine Verbindung halten, dann kommt bspw. die Fehlermeldung "connect error: Function not implemented (38)".

Du kannst auch gerne einmal direkt per CLI auf dem Pi folgende Befehle abgeben und die Ausgabe hier posten:

Ermitteln des Ventilstatus (auf/zu):


gatttool -i hci0 -b <MAC-Adresse> --char-read -a 0x006b


Emitteln des Batteriestatus:


gatttool -i hci0 -b <MAC-Adresse> --char-read -a 0x0029


Im besten Fall müssen wir ledigilich die Adressen der Chars anhand der Firmware Verison anpassen und dann sollte es funktionieren.

VG,

ambiman



X-Byte

Danke ambiman für Deine Rückmeldung  :)

Beide Ventile haben bei mir die Firmware Version 1.7.13.20

gatttool -i hci0 -b 70:xx:xx:xx:xx:F6 --char-read -a 0x006b
Characteristic value/descriptor: 00 00


gatttool -i hci0 -b 70:xx:xx:xx:xx:F6 --char-read -a 0x0029
Characteristic value/descriptor: 00 00


Bei dem etwas weiter weg, bereits angeschlossenem Ventil kommt bei beiden Abfragen nur "connect error: Function not implemented (38)". Allerdings wird es bei bluetoothctl / scan on / devices auf dem Pi gelistet, sollte also in Reichweite sein.

ambiman

Hallo X-Byte,

danke für deine Rückmeldung.
Ich kenne aktuell leider keinen Weg mein Ventil auf eine neue Firmware zu heben.
Ich gehe davon aus die Geräte werden bei Auslieferung einmal geflashed. Ich müsste diesbezüglich einmal bei Gardena anfragen.

Da die Ergebnise der beiden Abfragen kein brauchbares Ergebnis lieferten, müssen wir leider etwas reverse engineer'en :-(.

Könntest du bei Gelegenheit bitte einmal das BLE Fuzzer Skript hier ausführen und die Ergebnise teilen ?

https://gist.github.com/deliciouskek/e6589f2467461681b154

Idealerweise führst du das Skript einmal mit geschlossenen und einem mit geöffneten Ventil aus.
Du kannst die sleep Befehle im Skript entfernen.

Bzgl. dem Fehler "connect error: Function not implemented (38)": Kannst du das weiter entfernte / montierte Ventil denn
mittels Smartphone vom gleichen Standort wie der Pi per Gardena App steuern ?

Besten Dank und VG,

ambiman

X-Byte

Hi Ambiman,

Die Scriptausführung kann ich nächste Woche mal angehen, bis dahin hab ich recht volles Programm ;).

Übrigens habe ich zufälligerweise heute ein Gardena Bluetooth App (Android) erhalten, mit dem sich (endlich) die Ventil Firmwares direkt über die App flashen lassen. Dies wird auch direkt beim Starten der App und Verbinden mit dem Ventil angezeigt. Du müsstest damit auch in der Lage sein, dein Ventil auf den aktuellen Stand zu heben.

ZitatBzgl. dem Fehler "connect error: Function not implemented (38)": Kannst du das weiter entfernte / montierte Ventil denn
mittels Smartphone vom gleichen Standort wie der Pi per Gardena App steuern ?
Ja das funktioniert, Smartphone direkt neben Pi positioniert kann das weiter entfernte Ventil erreichen und steuern. Mag natürlich sein, dass die im Smartphone verbaute BTLE Einheit besser/leistungsstärker ist.

Gruß
X-Byte

ambiman

Hallo X-Byte,

Zitat von: X-Byte am 26 Juli 2022, 23:21:46
Übrigens habe ich zufälligerweise heute ein Gardena Bluetooth App (Android) erhalten, mit dem sich (endlich) die Ventil Firmwares direkt über die App flashen lassen. Dies wird auch direkt beim Starten der App und Verbinden mit dem Ventil angezeigt. Du müsstest damit auch in der Lage sein, dein Ventil auf den aktuellen Stand zu heben.
Gruß
X-Byte

Habe ich gestern Abend sowohl mit der iOS als auch mit der Android App probiert: Leider hat mir keiner der beiden Apps ein Firmware Update für mein Ventil angeboten. Vielleicht kam das OTA Update auch erst mit einer neuen Version!?
Ich habe nun auch einmal eine Anfrage an Gardena platziert - ich bin gespannt was zurück kommt.
Somit kann ich aktuell jedoch leider keine Tests durchführen :-(.

VG,

ambiman

maltejahn

#14
Hallo,

ich versuche mich gerade auch an dem Ventil. Das State bleibt im "requesting" hängen. Aber vielleicht passen die Einträge auch nicht:

Ventil ausVentil aus
0x0001
Characteristic value/descriptor: 00 18
0x0002
Characteristic value/descriptor: 02 03 00 00 2a
0x0003
Characteristic value/descriptor: 57 61 74 65 72 20 43 6f 6e 74 72 6f 6c
0x0004
Characteristic value/descriptor: 02 05 00 01 2a
0x0005
Characteristic value/descriptor: 00 00
0x0006
Characteristic value/descriptor: 02 07 00 04 2a
0x0007
Characteristic value/descriptor: 50 00 a0 00 00 00 e8 03
0x0008
Characteristic value/descriptor: 02 09 00 a6 2a
0x0009
Characteristic value/descriptor: 01
0x000a
Characteristic value/descriptor: 02 0b 00 c9 2a
0x000b
Characteristic value/descriptor: 00
0x000c
Characteristic value/descriptor: 01 18
0x000d
Characteristic value/descriptor: 20 0e 00 05 2a
0x000e
Characteristic value/descriptor read failed: Attribute can't be read
0x000f
Characteristic value/descriptor: 00 00
0x0010
Characteristic value/descriptor: 0a 18
0x0011
Characteristic value/descriptor: 02 12 00 24 2a
0x0012
Characteristic value/descriptor: 4d 6f 64 65 6c 20 4e 75 6d 62 65 72 20 54 42 44
0x0013
Characteristic value/descriptor: 02 14 00 29 2a
0x0014
Characteristic value/descriptor: 48 75 73 71 76 61 72 6e 61 20 41 42
sleep 5
0x0015
Characteristic value/descriptor: 02 16 00 26 2a
0x0016
Characteristic value/descriptor: 31 2e 37 2e 32 30 2e 32 35
0x0017
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 00 bd 98
0x0018
Characteristic value/descriptor: 12 19 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 00 bd 98
0x0019
Characteristic value/descriptor: 00
0x001a
Characteristic value/descriptor: 00 00
0x001b
Characteristic value/descriptor: 12 1c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 00 bd 98
0x001c
Characteristic value/descriptor: 00
0x001d
Characteristic value/descriptor: 00 00
0x001e
Characteristic value/descriptor: 02 1f 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 00 bd 98
0x001f
Characteristic value/descriptor: 00 00 00 00 00 00 00 00 00 00
0x0020
Characteristic value/descriptor: 0a 21 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 00 bd 98
0x0021
Characteristic value/descriptor: 50
0x0022
Characteristic value/descriptor: 02 23 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 15 00 bd 98
0x0023
Characteristic value/descriptor: 00
0x0024
Characteristic value/descriptor: 12 25 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 16 00 bd 98
0x0025
Characteristic value/descriptor: 00 00 00 00
0x0026
Characteristic value/descriptor: 00 00
0x0027
Characteristic value/descriptor: 1a 28 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 17 00 bd 98
0x0028
Characteristic value/descriptor: 00
sleep 5
0x0029
Characteristic value/descriptor: 00 00
0x002a
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 0f 18 bd 98
0x002b
Characteristic value/descriptor: 12 2c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 19 2a bd 98
0x002c
Characteristic value/descriptor: 64
0x002d
Characteristic value/descriptor: 00 00
0x002e
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0b bd 98
0x002f
Characteristic value/descriptor: 0a 30 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0b bd 98
0x0030
Characteristic value/descriptor: 00 00 00 00
0x0031
Characteristic value/descriptor: 0a 32 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0b bd 98
0x0032
Characteristic value/descriptor: 64
0x0033
Characteristic value/descriptor: 0a 34 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0b bd 98
0x0034
Characteristic value/descriptor: 22 de e3 62
0x0035
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b ee ee bd 98
0x0036
Characteristic value/descriptor: 02 37 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b ef ee bd 98
0x0037
Characteristic value/descriptor: 01 03 04 04 03 04 03 04 03 04 04 04 04 04 04 04 04 04 04 04 04 04
0x0038
Characteristic value/descriptor: 12 39 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b f0 ee bd 98
0x0039
Characteristic value/descriptor: 19
0x003a
Characteristic value/descriptor: 00 00
0x003b
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0d bd 98
0x003c
Characteristic value/descriptor: 02 3d 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0d bd 98
sleep 5
0x003d
Characteristic value/descriptor: 25 d4 e3 62 d3 d4 e3 62 d5 d4 e3 62 dc d4 e3 62 54 d9 e3 62 73 d9
0x003e
Characteristic value/descriptor: 12 3f 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0d bd 98
0x003f
Characteristic value/descriptor: 0b
0x0040
Characteristic value/descriptor: 00 00
0x0041
Characteristic value/descriptor: 02 42 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0d bd 98
0x0042
Characteristic value/descriptor: 02 02 02 02 02 02 02 02 02 02 00
0x0043
Characteristic value/descriptor: 02 44 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0d bd 98
0x0044
Characteristic value/descriptor: 03 00 00 00 32 00 00 00 01 00 00 00 02 00 00 00 4c 00 00 00 02 00
0x0045
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0c bd 98
0x0046
Characteristic value/descriptor: 0a 47 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0c bd 98
0x0047
Characteristic value/descriptor: 00 00 00 00
0x0048
Characteristic value/descriptor: 0a 49 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0c bd 98
0x0049
Characteristic value/descriptor: 00 00 00 00
0x004a
Characteristic value/descriptor: 0a 4b 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0c bd 98
0x004b
Characteristic value/descriptor: 00
0x004c
Characteristic value/descriptor: 0a 4d 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0c bd 98
0x004d
Characteristic value/descriptor: 00 00
0x004e
Characteristic value/descriptor read failed: Invalid handle
0x004f
Characteristic value/descriptor: 00
0x0050
Characteristic value/descriptor: 0a 51 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 16 0c bd 98
sleep 5
0x0051
Characteristic value/descriptor: 00 00
0x0052
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 20 0c bd 98
0x0053
Characteristic value/descriptor: 0a 54 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 21 0c bd 98
0x0054
Characteristic value/descriptor: 00 00 00 00
0x0055
Characteristic value/descriptor: 0a 56 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 22 0c bd 98
0x0056
Characteristic value/descriptor: 00 00 00 00
0x0057
Characteristic value/descriptor: 0a 58 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 23 0c bd 98
0x0058
Characteristic value/descriptor: 00
0x0059
Characteristic value/descriptor: 0a 5a 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 24 0c bd 98
0x005a
Characteristic value/descriptor: 00 00
0x005b
Characteristic value/descriptor: 0a 5c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 25 0c bd 98
0x005c
Characteristic value/descriptor: 00
0x005d
Characteristic value/descriptor: 0a 5e 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 26 0c bd 98
0x005e
Characteristic value/descriptor: 00 00
0x005f
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 30 0c bd 98
0x0060
Characteristic value/descriptor: 0a 61 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 31 0c bd 98
0x0061
Characteristic value/descriptor: 00 00 00 00
0x0062
Characteristic value/descriptor: 0a 63 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 32 0c bd 98
0x0063
Characteristic value/descriptor: 00 00 00 00
0x0064
Characteristic value/descriptor: 0a 65 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 33 0c bd 98
sleep 5
0x0065
Characteristic value/descriptor: 00
0x0066
Characteristic value/descriptor: 0a 67 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 34 0c bd 98
0x0067
Characteristic value/descriptor: 00 00
0x0068
Characteristic value/descriptor: 0a 69 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 35 0c bd 98
0x0069
Characteristic value/descriptor: 00
0x006a
Characteristic value/descriptor: 0a 6b 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 36 0c bd 98
0x006b
Characteristic value/descriptor: 00 00
0x006c
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0f bd 98
0x006d
Characteristic value/descriptor: 12 6e 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0f bd 98
0x006e
Characteristic value/descriptor: 00
0x006f
Characteristic value/descriptor: 00 00
0x0070
Characteristic value/descriptor: 12 71 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0f bd 98
0x0071
Characteristic value/descriptor: 01
0x0072
Characteristic value/descriptor: 00 00
0x0073
Characteristic value/descriptor: 0a 74 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0f bd 98
0x0074
Characteristic value/descriptor: 00 00 00 00
0x0075
Characteristic value/descriptor: 0a 76 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0f bd 98
0x0076
Characteristic value/descriptor: 08 07 00 00
0x0077
Characteristic value/descriptor: 02 78 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 15 0f bd 98
0x0078
Characteristic value/descriptor: 00
sleep 5
0x0079
Characteristic value/descriptor: 00 00 00 00 00 00 00 b0 00 40 51 04 d0 ff 00 f0
0x007a
Characteristic value/descriptor: 0c 7b 00 00 00 00 00 00 00 00 b0 00 40 51 04 d1 ff 00 f0
0x007b
Characteristic value/descriptor read failed: Attribute can't be read
0x007c
Characteristic value/descriptor: 4f 41 44 20 53 74 61 72 74 2f 52 65 73 65 74
0x007d



Ventil ein
Ventil ein
0x0001
Characteristic value/descriptor: 00 18
0x0002
Characteristic value/descriptor: 02 03 00 00 2a
0x0003
Characteristic value/descriptor: 57 61 74 65 72 20 43 6f 6e 74 72 6f 6c
0x0004
Characteristic value/descriptor: 02 05 00 01 2a
0x0005
Characteristic value/descriptor: 00 00
0x0006
Characteristic value/descriptor: 02 07 00 04 2a
0x0007
Characteristic value/descriptor: 50 00 a0 00 00 00 e8 03
0x0008
Characteristic value/descriptor: 02 09 00 a6 2a
0x0009
Characteristic value/descriptor: 01
0x000a
Characteristic value/descriptor: 02 0b 00 c9 2a
0x000b
Characteristic value/descriptor: 00
0x000c
Characteristic value/descriptor: 01 18
0x000d
Characteristic value/descriptor: 20 0e 00 05 2a
0x000e
Characteristic value/descriptor read failed: Attribute can't be read
0x000f
Characteristic value/descriptor: 00 00
0x0010
Characteristic value/descriptor: 0a 18
0x0011
Characteristic value/descriptor: 02 12 00 24 2a
0x0012
Characteristic value/descriptor: 4d 6f 64 65 6c 20 4e 75 6d 62 65 72 20 54 42 44
0x0013
Characteristic value/descriptor: 02 14 00 29 2a
0x0014
Characteristic value/descriptor: 48 75 73 71 76 61 72 6e 61 20 41 42
sleep 5
0x0015
Characteristic value/descriptor: 02 16 00 26 2a
0x0016
Characteristic value/descriptor: 31 2e 37 2e 32 30 2e 32 35
0x0017
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 00 bd 98
0x0018
Characteristic value/descriptor: 12 19 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 00 bd 98
0x0019
Characteristic value/descriptor: 00
0x001a
Characteristic value/descriptor: 00 00
0x001b
Characteristic value/descriptor: 12 1c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 00 bd 98
0x001c
Characteristic value/descriptor: 00
0x001d
Characteristic value/descriptor: 00 00
0x001e
Characteristic value/descriptor: 02 1f 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 00 bd 98
0x001f
Characteristic value/descriptor: 00 00 00 00 00 00 00 00 00 00
0x0020
Characteristic value/descriptor: 0a 21 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 00 bd 98
0x0021
Characteristic value/descriptor: 50
0x0022
Characteristic value/descriptor: 02 23 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 15 00 bd 98
0x0023
Characteristic value/descriptor: 00
0x0024
Characteristic value/descriptor: 12 25 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 16 00 bd 98
0x0025
Characteristic value/descriptor: 00 00 00 00
0x0026
Characteristic value/descriptor: 00 00
0x0027
Characteristic value/descriptor: 1a 28 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 17 00 bd 98
0x0028
Characteristic value/descriptor: 00
sleep 5
0x0029
Characteristic value/descriptor: 00 00
0x002a
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 0f 18 bd 98
0x002b
Characteristic value/descriptor: 12 2c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 19 2a bd 98
0x002c
Characteristic value/descriptor: 64
0x002d
Characteristic value/descriptor: 00 00
0x002e
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0b bd 98
0x002f
Characteristic value/descriptor: 0a 30 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0b bd 98
0x0030
Characteristic value/descriptor: 00 00 00 00
0x0031
Characteristic value/descriptor: 0a 32 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0b bd 98
0x0032
Characteristic value/descriptor: 64
0x0033
Characteristic value/descriptor: 0a 34 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0b bd 98
0x0034
Characteristic value/descriptor: 73 df e3 62
0x0035
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b ee ee bd 98
0x0036
Characteristic value/descriptor: 02 37 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b ef ee bd 98
0x0037
Characteristic value/descriptor: 01 03 04 04 03 04 03 04 03 04 04 04 04 04 04 04 04 04 04 04 04 04
0x0038
Characteristic value/descriptor: 12 39 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b f0 ee bd 98
0x0039
Characteristic value/descriptor: 2e
0x003a
Characteristic value/descriptor: 00 00
0x003b
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0d bd 98
0x003c
Characteristic value/descriptor: 02 3d 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0d bd 98
sleep 5
0x003d
Characteristic value/descriptor: 25 d4 e3 62 d3 d4 e3 62 d5 d4 e3 62 dc d4 e3 62 54 d9 e3 62 73 d9
0x003e
Characteristic value/descriptor: 12 3f 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0d bd 98
0x003f
Characteristic value/descriptor: 0b
0x0040
Characteristic value/descriptor: 00 00
0x0041
Characteristic value/descriptor: 02 42 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0d bd 98
0x0042
Characteristic value/descriptor: 02 02 02 02 02 02 02 02 02 02 00
0x0043
Characteristic value/descriptor: 02 44 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0d bd 98
0x0044
Characteristic value/descriptor: 03 00 00 00 32 00 00 00 01 00 00 00 02 00 00 00 4c 00 00 00 02 00
0x0045
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0c bd 98
0x0046
Characteristic value/descriptor: 0a 47 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0c bd 98
0x0047
Characteristic value/descriptor: 00 00 00 00
0x0048
Characteristic value/descriptor: 0a 49 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0c bd 98
0x0049
Characteristic value/descriptor: 00 00 00 00
0x004a
Characteristic value/descriptor: 0a 4b 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0c bd 98
0x004b
Characteristic value/descriptor: 00
0x004c
Characteristic value/descriptor: 0a 4d 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0c bd 98
0x004d
Characteristic value/descriptor: 00 00
0x004e
Characteristic value/descriptor read failed: Invalid handle
0x004f
Characteristic value/descriptor: 00
0x0050
Characteristic value/descriptor: 0a 51 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 16 0c bd 98
sleep 5
0x0051
Characteristic value/descriptor: 00 00
0x0052
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 20 0c bd 98
0x0053
Characteristic value/descriptor: 0a 54 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 21 0c bd 98
0x0054
Characteristic value/descriptor: 00 00 00 00
0x0055
Characteristic value/descriptor: 0a 56 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 22 0c bd 98
0x0056
Characteristic value/descriptor: 00 00 00 00
0x0057
Characteristic value/descriptor: 0a 58 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 23 0c bd 98
0x0058
Characteristic value/descriptor: 00
0x0059
Characteristic value/descriptor: 0a 5a 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 24 0c bd 98
0x005a
Characteristic value/descriptor: 00 00
0x005b
Characteristic value/descriptor: 0a 5c 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 25 0c bd 98
0x005c
Characteristic value/descriptor: 00
0x005d
Characteristic value/descriptor: 0a 5e 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 26 0c bd 98
0x005e
Characteristic value/descriptor: 00 00
0x005f
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 30 0c bd 98
0x0060
Characteristic value/descriptor: 0a 61 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 31 0c bd 98
0x0061
Characteristic value/descriptor: 00 00 00 00
0x0062
Characteristic value/descriptor: 0a 63 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 32 0c bd 98
0x0063
Characteristic value/descriptor: 00 00 00 00
0x0064
Characteristic value/descriptor: 0a 65 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 33 0c bd 98
sleep 5
0x0065
Characteristic value/descriptor: 00
0x0066
Characteristic value/descriptor: 0a 67 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 34 0c bd 98
0x0067
Characteristic value/descriptor: 00 00
0x0068
Characteristic value/descriptor: 0a 69 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 35 0c bd 98
0x0069
Characteristic value/descriptor: 00
0x006a
Characteristic value/descriptor: 0a 6b 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 36 0c bd 98
0x006b
Characteristic value/descriptor: 00 00
0x006c
Characteristic value/descriptor: e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 10 0f bd 98
0x006d
Characteristic value/descriptor: 12 6e 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 11 0f bd 98
0x006e
Characteristic value/descriptor: 01
0x006f
Characteristic value/descriptor: 00 00
0x0070
Characteristic value/descriptor: 12 71 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 12 0f bd 98
0x0071
Characteristic value/descriptor: 01
0x0072
Characteristic value/descriptor: 00 00
0x0073
Characteristic value/descriptor: 0a 74 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 13 0f bd 98
0x0074
Characteristic value/descriptor: 1f 06 00 00
0x0075
Characteristic value/descriptor: 0a 76 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 14 0f bd 98
0x0076
Characteristic value/descriptor: 08 07 00 00
0x0077
Characteristic value/descriptor: 02 78 00 e4 6d dc 75 bf dd e5 84 1a 42 0e 0b 15 0f bd 98
0x0078
Characteristic value/descriptor: 00
sleep 5
0x0079
Characteristic value/descriptor: 00 00 00 00 00 00 00 b0 00 40 51 04 d0 ff 00 f0
0x007a
Characteristic value/descriptor: 0c 7b 00 00 00 00 00 00 00 00 b0 00 40 51 04 d1 ff 00 f0
0x007b


0x71 bleibt identisch, allerdings ändert sich 0x6e . Scheint doch zu passen

my %Gardena_BLE_Models = (
        watercontrol => {
                'whandle'               => '0x0071',
                'timestamp'             => '0x0031',
                'battery'               => '0x0029', ##Most likely the battery - or it's 0x002f
                'state'                 => '0x006b',
                'duration'              => '0x0071',
                #'laststop'             => '0x003a', ##TODO: History sprinkler data ?
                'ctrlunitstate' => '0x006e'
        }
);


Komisch finde ich, das ich per Console einen Befehl absetzen kann:
pi@raspberrypi:~ $ gatttool -i hci0 -b F0:5E:CD:xx:yy:zz --char-read -a 0x006e
Characteristic value/descriptor: 00

aber über FHEM klappt das nicht
2022.07.29 13:50:59 5: Gardena_BLE_Get (GardenaBLE) - cmd: ctrlunitstate
2022.07.29 13:50:59 5: Gardena_BLE (GardenaBLE) - getCharValue: ctrlunitstate
2022.07.29 13:50:59 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:50:59 4: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool Another job is running adding to pending: read 0x006e
2022.07.29 13:51:11 1: Timeout for Gardena_BLE_ExecGatttool_Run reached, terminated process 17261
2022.07.29 13:51:11 5: Gardena_BLE_Notify (GardenaBLE) - devname: GardenaBLE | devtype: GardenaBLEDevice | events: state: unreachable
2022.07.29 13:51:11 5: Gardena_BLE_Notify (GardenaBLE) - devname: GardenaBLE | devtype: GardenaBLEDevice | events: lastGattError: The BlockingCall Process terminated unexpectedly. Timedout state: error
2022.07.29 13:51:11 3: Gardena_BLE (GardenaBLE) - ExecGatttool_Aborted: The BlockingCall Process terminated unexpectedly. Timeout
2022.07.29 13:52:13 5: Gardena_BLE_stateRequest (GardenaBLE)
2022.07.29 13:52:13 5: Gardena_BLE_Notify (GardenaBLE) - devname: GardenaBLE | devtype: GardenaBLEDevice | events: state: requesting
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - Read Gardena_BLE_ExecGatttool_Run GardenaBLE|F0:5E:CD:xx:yy:zz|read|0x006b
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - getCharValue: battery
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool Another job is running adding to pending: read 0x0029
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - getCharValue: timestamp
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool Another job is running adding to pending: read 0x0031
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - getCharValue: duration
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool Another job is running adding to pending: read 0x0071
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - getCharValue: ctrlunitstate
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool with mod: read
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - Run CreateParamGatttool Another job is running adding to pending: read 0x006e
2022.07.29 13:52:13 5: Gardena_BLE (GardenaBLE) - stateRequestTimer: Call Request Timer
2022.07.29 13:52:13 4: Gardena_BLE (GardenaBLE) - ExecGatttool_Run: call gatttool with command: gatttool -i hci0 -b F0:5E:CD:xx:yy:zz --char-read -a 0x006b 2>&1 /dev/null and loop 0
2022.07.29 13:52:53 5: Gardena_BLE (GardenaBLE) - ExecGatttool_Run: gatttool loop result connect error: Connection refused (111)
2022.07.29 13:52:53 4: Gardena_BLE (GardenaBLE) - ExecGatttool_Run: call gatttool with command: gatttool -i hci0 -b F0:5E:CD:xx:yyzz --char-read -a 0x006b 2>&1 /dev/null and loop 1



-> FHEM: defmod GardenaBLE GardenaBLEDevice F0:5E:CD:xx:yy:zz watercontrol, wobei der Name Watercontrol bei der Abfrage des device ebenfalls leer war