FHEM Forum

FHEM - Anwendungen => Beleuchtung => Thema gestartet von: CoolTux am 08 Januar 2020, 20:36:44

Titel: [gelöst] deconz API und Aqara Cube
Beitrag von: CoolTux am 08 Januar 2020, 20:36:44
Hallo Andre,

Wenn man den Cube auf seiner liegenden Fläche im Uhrzeigersinn oder gegen den Uhrzeigersinn dreht ändert sich nicht der Wert 2001 oder 1002 oder so sondern in der phoscon App sieht man das sich die Gradzahl ändert von nagtiv zu positiv und bei entgegengesetzte Richtung von positiv zu negativ.

Was brauchst Du damit dies in FHEM mit dargestellt wird.


Grüße
Marko
Titel: Antw:deconz API und Aqara Cube
Beitrag von: justme1968 am 08 Januar 2020, 21:38:09
mit verbose 4 oder 5 im log schauen was gesendet wird.
Titel: Antw:deconz API und Aqara Cube
Beitrag von: KyleK am 08 Januar 2020, 23:31:23
deconz legt für den Aqara Cube 2 sensor devices an: Eins für die Flips und Swipes (und drop und double-tap), und eins für die rotation.

Mein Device für die Flips:

defmod ZW.Flip HUEDevice sensor 17  IODev=deCONZ
attr ZW.Flip IODev deCONZ
attr ZW.Flip room System->HUEDevice
attr ZW.Flip stateFormat action (side)
attr ZW.Flip userReadings first \
{\
  my $string = ReadingsVal($name,"state","");;;;\
  my $first  = substr($string, 0, 1);;;;\
  if($first gt "0" and $first lt "7")\
  {\
    return $first\
  }\
  else\
  {\
    return 'unknown'\
  }\
}, \
last \
{\
  my $string = ReadingsVal($name,"state","");;;;\
  my $last  = substr($string, 3, 1);;;; \
  if($last gt "0" and $last lt "7")\
  {\
    return $last\
  }\
  else\
  {\
    return 'unknown'\
  }}, \
action \
{\
   my $string = ReadingsVal($name,"state","");;;;\
   my $first  = substr($string, 0, 1);;;; \
   my $last   = substr($string, 3, 1);;;; \
   if ($string eq "7007") {return 'shake'}\
   elsif($string eq "7008") {return 'drop'}\
   elsif ($first eq $last) {return 'doubletap'}  \
   elsif ($last eq "0") {return 'swipe'} \
   elsif ($string =~ /(1006|2005|3004|4003|5002|6001)/) {return 'flip180'}\
   elsif ($string =~ /(1002|1003|1004|1005|2001|2003|2004|2006|3001|3002|3005|3006|4001|4002|4005|4006|5001|5003|5004|5006|6002|6003|6004|6005)/)\
   {\
     return 'flip90'\
   }\
   else {return 'unknown'}}, \
side \
{\
   my $string = ReadingsVal($name,"state","");;;;\
   my $first  = substr($string, 0, 1);;;;  \
   if ($first eq "1") {return 'upper'} \
   elsif ($first eq "2") {return 'behind'} \
   elsif ($first eq "3") {return 'left'} \
   elsif ($first eq "4") {return 'right'} \
   elsif ($first eq "5") {return 'front'} \
   elsif ($first eq "6") {return 'under'} \
   else {return 'unknown'}}, \
last_side \
{\
   my $string = ReadingsVal($name,"state","");;;; \
   my $last  = substr($string, 3, 1);;;; \
   if ($last eq "1") {return 'upper'} \
   elsif ($last eq "2") {return 'behind'} \
   elsif ($last eq "3") {return 'left'} \
   elsif ($last eq "4") {return 'right'} \
   elsif ($last eq "5") {return 'front'} \
   elsif ($last eq "6") {return 'under'} \
  else {return 'unknown'}}


Und für Rotate:

defmod ZW.Rotate HUEDevice sensor 18  IODev=deCONZ
attr ZW.Rotate IODev deCONZ
attr ZW.Rotate room System->HUEDevice
attr ZW.Rotate stateFormat rotate
attr ZW.Rotate userReadings rotate {\
   \
  my $state = ReadingsVal($name,"state","");;\
  if ($state gt 0)\
  {\
     return 'right'\
  }\
  elsif ($state lt 0)\
  {\
     return 'left'\
  }\
  else\
  {\
     return 'unknown'\
  }\
}


Ich werte dann in einem DOIF die Stati der beiden Sensoren aus und führe Aktionen aus.
Titel: Antw:deconz API und Aqara Cube
Beitrag von: volschin am 08 Januar 2020, 23:33:36
Wenn ich mich recht erinnere, gab es ein umfangreicheres Reverse Engineering dazu in einem Issue von deCONZ.
Titel: Antw:deconz API und Aqara Cube
Beitrag von: CoolTux am 08 Januar 2020, 23:40:26
Zitat von: KyleK am 08 Januar 2020, 23:31:23
deconz legt für den Aqara Cube 2 sensor devices an: Eins für die Flips und Swipes (und drop und double-tap), und eins für die rotation.

Mein Device für die Flips:

defmod ZW.Flip HUEDevice sensor 17  IODev=deCONZ
attr ZW.Flip IODev deCONZ
attr ZW.Flip room System->HUEDevice
attr ZW.Flip stateFormat action (side)
attr ZW.Flip userReadings first \
{\
  my $string = ReadingsVal($name,"state","");;;;\
  my $first  = substr($string, 0, 1);;;;\
  if($first gt "0" and $first lt "7")\
  {\
    return $first\
  }\
  else\
  {\
    return 'unknown'\
  }\
}, \
last \
{\
  my $string = ReadingsVal($name,"state","");;;;\
  my $last  = substr($string, 3, 1);;;; \
  if($last gt "0" and $last lt "7")\
  {\
    return $last\
  }\
  else\
  {\
    return 'unknown'\
  }}, \
action \
{\
   my $string = ReadingsVal($name,"state","");;;;\
   my $first  = substr($string, 0, 1);;;; \
   my $last   = substr($string, 3, 1);;;; \
   if ($string eq "7007") {return 'shake'}\
   elsif($string eq "7008") {return 'drop'}\
   elsif ($first eq $last) {return 'doubletap'}  \
   elsif ($last eq "0") {return 'swipe'} \
   elsif ($string =~ /(1006|2005|3004|4003|5002|6001)/) {return 'flip180'}\
   elsif ($string =~ /(1002|1003|1004|1005|2001|2003|2004|2006|3001|3002|3005|3006|4001|4002|4005|4006|5001|5003|5004|5006|6002|6003|6004|6005)/)\
   {\
     return 'flip90'\
   }\
   else {return 'unknown'}}, \
side \
{\
   my $string = ReadingsVal($name,"state","");;;;\
   my $first  = substr($string, 0, 1);;;;  \
   if ($first eq "1") {return 'upper'} \
   elsif ($first eq "2") {return 'behind'} \
   elsif ($first eq "3") {return 'left'} \
   elsif ($first eq "4") {return 'right'} \
   elsif ($first eq "5") {return 'front'} \
   elsif ($first eq "6") {return 'under'} \
   else {return 'unknown'}}, \
last_side \
{\
   my $string = ReadingsVal($name,"state","");;;; \
   my $last  = substr($string, 3, 1);;;; \
   if ($last eq "1") {return 'upper'} \
   elsif ($last eq "2") {return 'behind'} \
   elsif ($last eq "3") {return 'left'} \
   elsif ($last eq "4") {return 'right'} \
   elsif ($last eq "5") {return 'front'} \
   elsif ($last eq "6") {return 'under'} \
  else {return 'unknown'}}


Und für Rotate:

defmod ZW.Rotate HUEDevice sensor 18  IODev=deCONZ
attr ZW.Rotate IODev deCONZ
attr ZW.Rotate room System->HUEDevice
attr ZW.Rotate stateFormat rotate
attr ZW.Rotate userReadings rotate {\
   \
  my $state = ReadingsVal($name,"state","");;\
  if ($state gt 0)\
  {\
     return 'right'\
  }\
  elsif ($state lt 0)\
  {\
     return 'left'\
  }\
  else\
  {\
     return 'unknown'\
  }\
}


Ich werte dann in einem DOIF die Stati der beiden Sensoren aus und führe Aktionen aus.

Vielen Dank. Das war in der Tat schon die richtige Antwort. Ich habe noch mal geschaut und es wurden tatsächlich 2 passende Geräte für den Cube angezeigt. Ich werde da morgen mal schauen.

Dann hat sich das erstmal erledigt. DANKE
Titel: Antw:[gelöst] deconz API und Aqara Cube
Beitrag von: Jackie am 17 Dezember 2021, 17:56:37
Hallo,

vielen Dank für die tolle Beschreibung, ich habe auf meinem Raspi3, auf dem auch FHEM läuft, die deConz Software installiert und meinen Aqara Cube nach Anleitung eingebunden. Ich habe ein Problem, das nicht direkt mit FHEM zu tun hat, denn es tritt auch schon in der deConz Webapp auf, aber vielleicht hat hier jemand einen Tipp für mich:

der Cube wurde in deConz erfolgreich mit zwei Sensoren angelernt, und wenn ich eine Aktion mit dem Cube durchführe, dann funktioniert das auch eine Weile, wenige Sekunden bis wenige Minuten lang, und dann kommt plötzlich nichts mehr in der Weboberfläche an. Ich muss dann immer kurz auf den kleinen Knopf im Cube drücken, damit er wieder für ein paar Sekunden funktioniert, danach geht er dann wieder nicht.

Was könnte der Grund dafür sein, dass mein Cube nur ab und zu funktioniert? Muss man da noch irgendwas beachten?