[gelöst] deconz API und Aqara Cube

Begonnen von CoolTux, 08 Januar 2020, 20:36:44

Vorheriges Thema - Nächstes Thema

CoolTux

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
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

justme1968

mit verbose 4 oder 5 im log schauen was gesendet wird.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

KyleK

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.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

volschin

Wenn ich mich recht erinnere, gab es ein umfangreicheres Reverse Engineering dazu in einem Issue von deCONZ.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

CoolTux

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
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

Jackie

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?
Raspi 3 mit FHEM, LWZ 304 Trend, Fronius Symo 10.0-3-M, Conbee II Stick, Optokoppler (USB, FTDI), diverse Ikea Tradfri Komponenten,...