FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Gunther am 15 Oktober 2018, 10:28:58

Titel: deconz: Xiaomi Cube - Readings unklar
Beitrag von: Gunther am 15 Oktober 2018, 10:28:58
Ich habe einen deCONZ Stick von Dresden Elektronik auf einem RPI als Gateway für Hue, Zigbee,... installiert.
Wie hier beschrieben:
http://coldcorner.de/2018/04/02/deconz-hue-bridge-auf-dem-raspberry-pi-emulieren/ (http://coldcorner.de/2018/04/02/deconz-hue-bridge-auf-dem-raspberry-pi-emulieren/)

Nun bekomme ich nachdem ich meinen Cube über die Phoscon WebApp verbunden habe bei einem
get deCONZ sensors

in FHEM drei Geräte für meinen Cube angezeigt.
Die habe ich testweise mal
eg_ki_cube_1
eg_ki_cube_2
eg_ki_cube_3

genannt.

Wenn ich das Ding bewege bekomme ich Readings, die ich nur bedingt deuten kann.
Hier mal meine Notizen:

eg_ki_cube_1: initialized

eg_ki_cube_2
Schütteln: 4004, 4005
45 drehen: 1003
180 drehen: 3004
doppelklick 2002

eg_ki_cube_3
drehen 90 rechts 6581 5643 8001 6645


Meine Fragen:
1. Bin ich mit meinem Vorhaben über phoscon-->fhem überhaupt auf einem sinnvollen Weg?
2. Wie gehe ich mit den Readings um?
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: LordVoodoo am 15 Oktober 2018, 11:01:42
Guten Morgen,

der Cube ist nicht einfach zu interpretieren.
Es gibt vier Aktionen, die ich Auswerten konnten:

1: Kippen von Seite A auf Seite B.
2: Klopfen durch Anheben und Senken.
3: Schieben.
4: Drehung links/rechts. Die Stärke der Drehung (zB 45 Grad) konnte ich nicht zuverlässig ermitteln.

Über DeConz werden Dir zwei Sensoren gemeldet, einer für die Kippen/Klopfen und einer für Drehung.

Diese beiden Sensoren fasse ich in einem Dummy-Device zusammen und lasse diesen Status 0,5 Sekunden im Dummy stehen.

Schlafzimmer_Schalter_Cube_Seite:.*|Schlafzimmer_Schalter_Cube_Drehung:.* {
my $device = "Schlafzimmer_Schalter_Cube";
my $val = ReadingsVal($NAME, "state", 0);
my $currentPosition = substr $val, 0, 1;
my $previousPosition = substr $val, -1;
my $previousPositionOld = ReadingsVal($device, "previousPosition", 0);
my $rotationOld = ReadingsVal($device, "rotation", 0);
my $rotation;
my $command = "none";

if ($NAME eq "Schlafzimmer_Schalter_Cube_Seite" and $val ne "7000")
{
  if ($currentPosition ne $previousPosition) { $command = "tilt"; }
  if ($currentPosition eq $previousPosition) { $command = "knock"; }
  if ($previousPosition eq "0") { $command = "move"; }

  if ($command ne "tilt") { $previousPosition = $previousPositionOld; }

  fhem("setreading $device currentPosition $currentPosition");
  fhem("setreading $device previousPosition $previousPosition");
}

if ($NAME eq "Schlafzimmer_Schalter_Cube_Drehung")
{
  $rotation = ReadingsVal($NAME, "state", 0);
  if ($val ne $rotationOld and $rotation lt 0) { $command = "rotate_left"; }
  if ($val ne $rotationOld and $rotation gt 0) { $command = "rotate_right"; }
  if ($val ne $rotationOld)                    { fhem("setreading $device rotation $val"); }
}

fhem("setreading $device command $command;sleep 0.5;setreading $device command none");

}


Auf dieses Dummy kann man anschließend Notify oder DOIF anwenden.


Gesendet von iPhone mit Tapatalk
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Gunther am 15 Oktober 2018, 11:47:17
Danke für die schnelle Rückmeldung.
Ich bekomme drei Geräte über Phoscon gemeldet.
Ist der Code in einer myUtils oder wo hast Du den stehen?
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: LordVoodoo am 15 Oktober 2018, 12:00:56
Ich habe mir das in ein Notify geschrieben.
Aktualisiert das DUMMY Device Schlafzimmer_Schalter_Cube durch die beiden Sensoren Schlafzimmer_Schalter_Cube_Drehung und Schlafzimmer_Schalter_Cube_Seite.

Habe eben nochmal geschaut, bekomme nur zwei Sensoren via DeConz.

Bei Auswertung der Seite bekommt man einen vierstelligen Wert.
Die erste Stelle ist die Seite, die dann oben liegt, die letzte Stelle die Seite die zuvor oben lag. Man muss sich das wie einen aufgeklappten Würfel vorstellen.
Ist aber schon ein paar Wochen her, dass ich das auseinander genommen habe. Hoffe,meine Erinnerung täuscht mich nicht.


Gesendet von iPhone mit Tapatalk
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Gunther am 15 Oktober 2018, 17:34:09
Danke!

Ich bekomme beim Eingeben in der RAW-Definition eine Fehlermeldung (meine Devices heißen nur anders, Dummy ist angelegt):
define notify_eg_ki_cube notify eg_ki_cube_seite:.*|eg_ki_cube_drehung:.* {
my $device = "eg_ki_cube";
my $val = ReadingsVal($NAME, "state", 0);
my $currentPosition = substr $val, 0, 1;
my $previousPosition = substr $val, -1;
my $previousPositionOld = ReadingsVal($device, "previousPosition", 0);
my $rotationOld = ReadingsVal($device, "rotation", 0);
my $rotation;
my $command = "none";

if ($NAME eq "eg_ki_cube_seite" and $val ne "7000")
{
  if ($currentPosition ne $previousPosition) { $command = "tilt"; }
  if ($currentPosition eq $previousPosition) { $command = "knock"; }
  if ($previousPosition eq "0") { $command = "move"; }

  if ($command ne "tilt") { $previousPosition = $previousPositionOld; }

  fhem("setreading $device currentPosition $currentPosition");
  fhem("setreading $device previousPosition $previousPosition");
}

if ($NAME eq "eg_ki_cube_drehung")
{
  $rotation = ReadingsVal($NAME, "state", 0);
  if ($val ne $rotationOld and $rotation lt 0) { $command = "rotate_left"; }
  if ($val ne $rotationOld and $rotation gt 0) { $command = "rotate_right"; }
  if ($val ne $rotationOld)                    { fhem("setreading $device rotation $val"); }
}

fhem("setreading $device command $command;sleep 0.5;setreading $device command none");

}


attr notify_eg_ki_cube room Logik

save


Fehlermeldung:
Missing right curly or square bracket at (eval 374452) line 1, at end of line
syntax error at (eval 374452) line 1, at EOF


Finde den Fehler nicht, scheint irgendwas mit dem Zeilenumbruch in der ersten Zeile zu tun zu haben. Klammer kommt ja erst später...
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: LordVoodoo am 16 Oktober 2018, 10:45:38
Hast Du das Notify manuell angelegt und anschließend den Text hineinkopiert?

Würde noch dafür sorgen, dass auf dem Weg zur ersten öffnenden Klammer ,,{" kein Zeilenumbruch kommt.


Gesendet von iPhone mit Tapatalk
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Gunther am 16 Oktober 2018, 11:04:56
Ja manuell.

Habe schon gesucht, finde aber den Fehler leider nicht...
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Papaloewe am 12 Februar 2019, 18:30:44
Nach einiger Pfriemelei komme ich zu einem anderem Ergebnis.
Vielleicht habe ich aber auch eine neuere, ältere Version des Zauberwürfels?
Vielleicht hilft es ja jemandem. Viel Erfolg.
MfG
Thomas


defmod Zauberwuerfel1_action HUEDevice sensor 8  IODev=deCONZ
attr Zauberwuerfel1_action IODev deCONZ
attr Zauberwuerfel1_action icon xiaomi_cube
attr Zauberwuerfel1_action room HUEDevice,Wohnen
attr Zauberwuerfel1_action stateFormat Aktion: action\
Seite:  side
attr Zauberwuerfel1_action userReadings first \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
  {return $first}}, \
last \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $last  = substr($string, 3, 1);;;; \
  {return $last}}, \
action \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
my $last   = substr($string, 3, 1);;;; \
if ($first eq "7") {return 'shake'} \
elsif ($first eq $last) {return 'doubletap'}  \
elsif ($last eq "0") {return 'move'} \
elsif ($first gt "0" and $first lt "7") {return 'flip'} \
  else {return 'unknown'}}, \
side \
{my $string = ReadingsVal("Zauberwuerfel1_action","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("Zauberwuerfel1_action","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'}}


defmod Zauberwuerfel1_angle HUEDevice sensor 10  IODev=deCONZ
attr Zauberwuerfel1_angle IODev deCONZ
attr Zauberwuerfel1_angle icon xiaomi_cube
attr Zauberwuerfel1_angle room HUEDevice,Wohnen
attr Zauberwuerfel1_angle stateFormat Drehrichtung: rotate
attr Zauberwuerfel1_angle userReadings rotate \
{my $state = ReadingsVal("Zauberwuerfel1_angle","state","");;;; \
if ($state gt 0) {return 'right'} \
elsif ($state lt 0) {return 'left'} \
  else {return 'unknown'}}
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: CoolTux am 12 Februar 2019, 19:36:31
Verstehe nicht so ganz was daran nicht zu verstehen ist.

1002
Kommt von Seite 2 und kippt auf Seite 1 also 90 Grad

5001
kommt von Seite 1 und kippt auf Seite 5 müsste also glaube 180 Grad sein (mache das gerade aus dem Kopf) Ausnahme sind schütteln 7000 oder so und verschieben x004 oder so.

Im Prinzip ganz einfach.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Papaloewe am 12 Februar 2019, 20:07:02
Da gebe ich dir recht, nur das Verschieben ist x000, aber sonst eigentlich logisch.
Das Kippen um 180° fehlt mir noch in meinem Userreading.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: CoolTux am 12 Februar 2019, 20:13:29
Viel interessanter ist das drehen auf einer Seite. Klappt das bei Dir. So wie im Werbevideo? Bei mir leider nicht.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Papaloewe am 12 Februar 2019, 20:18:58
Ich kann beim Drehen auf derselben Seite nur positive, oder negative Werte unterscheiden, welche sich seltsam verändern?
Also nur die Drehrichtung kann vernünftig bestimmt werden.

Wie kann man sowas zum Dimmen, oder Lautstärke einstellen nutzen?
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: CoolTux am 12 Februar 2019, 20:26:53
Keine Ahnung. Bei mir passiert da gar nichts. Was verwendest Du als Gateway?
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Papaloewe am 12 Februar 2019, 20:33:37
Mittlerweile bin ich auf den ConBee Stick gewechselt.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: CoolTux am 12 Februar 2019, 20:39:41
Dann muss ich das noch mal testen. Aktuell ärgert mich erstmal deCONZ mit 80% Prozessorlast nach 5 Stunden lauf.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: KernSani am 12 Februar 2019, 20:40:21
Das Zahlen sollten näherungsweise den Drehwinkel angeben (bezogen auf eine imaginäre 0-Linie. Also: Alter Wert 70, neuer Wert -20 ergibt Drehung nach links um 90 Grad (so zumindest meine Interpretation)

Edit: Hab den Cube noch ein paarmal gedreht... Das ist eher der tatsächliche Winkel... also negative Zahlen Drehung um x Grad nach links, positiv nach rechts.
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Green Hornet am 27 Februar 2019, 22:31:26
Zitat von: Papaloewe am 12 Februar 2019, 18:30:44
Nach einiger Pfriemelei komme ich zu einem anderem Ergebnis.
Vielleicht habe ich aber auch eine neuere, ältere Version des Zauberwürfels?
Vielleicht hilft es ja jemandem. Viel Erfolg.
MfG
Thomas


defmod Zauberwuerfel1_action HUEDevice sensor 8  IODev=deCONZ
attr Zauberwuerfel1_action IODev deCONZ
attr Zauberwuerfel1_action icon xiaomi_cube
attr Zauberwuerfel1_action room HUEDevice,Wohnen
attr Zauberwuerfel1_action stateFormat Aktion: action\
Seite:  side
attr Zauberwuerfel1_action userReadings first \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
  {return $first}}, \
last \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $last  = substr($string, 3, 1);;;; \
  {return $last}}, \
action \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
my $last   = substr($string, 3, 1);;;; \
if ($first eq "7") {return 'shake'} \
elsif ($first eq $last) {return 'doubletap'}  \
elsif ($last eq "0") {return 'move'} \
elsif ($first gt "0" and $first lt "7") {return 'flip'} \
  else {return 'unknown'}}, \
side \
{my $string = ReadingsVal("Zauberwuerfel1_action","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("Zauberwuerfel1_action","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'}}


defmod Zauberwuerfel1_angle HUEDevice sensor 10  IODev=deCONZ
attr Zauberwuerfel1_angle IODev deCONZ
attr Zauberwuerfel1_angle icon xiaomi_cube
attr Zauberwuerfel1_angle room HUEDevice,Wohnen
attr Zauberwuerfel1_angle stateFormat Drehrichtung: rotate
attr Zauberwuerfel1_angle userReadings rotate \
{my $state = ReadingsVal("Zauberwuerfel1_angle","state","");;;; \
if ($state gt 0) {return 'right'} \
elsif ($state lt 0) {return 'left'} \
  else {return 'unknown'}}


Hallo zusammen,

wenn ich das Userreading von Papaloewe verwende bekomm ich folgende Fehler. Vielleicht hat jemand eine Idee was ich falsch mache :(

Internals:
   CFGFN     
   DEF        sensor 13  IODev=Raspbee_1
   FUUID      5c76dca7-f33f-9f3a-5d0d-7c85dd05b46fdf44
   ID         S13
   INTERVAL   
   IODev      Raspbee_1
   NAME       Wz.Zauberwuerfel1_action
   NR         94617
   STATE      Aktion: action
Seite:  side
   TYPE       HUEDevice
   lastupdated 2019-02-27 21:23:25
   lastupdated_local 2019-02-27 22:23:25
   manufacturername LUMI
   modelid    lumi.sensor_cube.aqgl01
   name       Zauberw�rfel Wohnzimmer
   on         1
   reachable  1
   swversion  20160704
   type       ZHASwitch
   uniqueid   00:15:8d:00:02:9a:90:07-02-0012
   Helper:
     DBLOG:
       state:
         DBLogging:
           TIME       1551302605.92177
           VALUE      5005
   READINGS:
     2019-02-27 21:48:00   battery         85
     2019-02-27 22:23:25   first           Error evaluating Wz.Zauberwuerfel1_action userReading first: syntax error at (eval 495006) line 2, near ")
my "
Global symbol "$first" requires explicit package name at (eval 495006) line 2, <GEN1028326> line 1.
Global symbol "$string" requires explicit package name at (eval 495006) line 2, <GEN1028326> line 1.
Global symbol "$first" requires explicit package name at (eval 495006) line 3, <GEN1028326> line 1.
syntax error at (eval 495006) line 3, near "}}"

     2019-02-27 21:48:00   reachable       true
     2019-02-27 22:23:25   state           5005
   helper:
     devtype    S
     reachable  0
     update_timeout 1
     setList:
Attributes:
   IODev      Raspbee_1
   room       Wohnzimmer
   stateFormat Aktion: action
Seite:  side
   userReadings first {my $string = ReadingsVal("Wz.Zauberwuerfel1_action","state","")
my $first  = substr($string, 0, 1)
  {return $first}}
last {my $string = ReadingsVal("Wz.Zauberwuerfel1_action","state","")
my $last  = substr($string, 3, 1)
  {return $last}}
action {my $string = ReadingsVal("Wz.Zauberwuerfel1_action","state","")
my $first  = substr($string, 0, 1)
my $last   = substr($string, 3, 1)
if ($first eq "7") {return 'shake'}
elsif ($first eq $last) {return 'doubletap'}
elsif ($last eq "0") {return 'move'}
elsif ($first gt "0" and $first lt "7") {return 'flip'}
  else {return 'unknown'}}
side {my $string = ReadingsVal("Wz.Zauberwuerfel1_action","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("Wz.Zauberwuerfel1_action","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'}}
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Green Hornet am 28 Februar 2019, 19:26:32
OK, hab' s jetzt selber gelöst. Habe die Semikolons warum auch immer raus gelöscht gehabt. ::)
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Papaloewe am 28 Februar 2019, 19:31:26
Sorry, gerade erst gesehen, aber ich habe das Userreading noch um flip-180 erweitert:
first
{my $string = ReadingsVal($name,"state","");;
my $first  = substr($string, 0, 1);;
  {return $first}},
last
{my $string = ReadingsVal($name,"state","");;
my $last  = substr($string, 3, 1);;
  {return $last}},
action
{my $string = ReadingsVal($name,"state","");;
my $first  = substr($string, 0, 1);;
my $last   = substr($string, 3, 1);;
my $sum   = ($first + $last);;
if ($first eq "7") {return 'shake'}
elsif ($first eq $last) {return 'doubletap'} 
elsif ($last eq "0") {return 'move'}
elsif ($sum eq "7") {return 'flip-180'}
elsif ($first gt "0" and $first lt "7") {return 'flip-90'}
  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'}}
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Green Hornet am 28 Februar 2019, 20:48:30
@Papaloewe, läuft super Danke!!!! :)
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: mimo84 am 29 November 2019, 20:28:29
Servus miteinander,

ich hab das drehdings nochmal aufgebohrt:

rotate
{my $state = ReadingsVal("AQ_Cube","state","");;
if ($state > 9000) {return 'right90'}
elsif ($state > 4500) {return 'right45'}
elsif ($state > 0) {return 'right'}
elsif ($state < -9000) {return 'left90'}
elsif ($state < -4500) {return 'left45'}
elsif ($state < 0) {return 'left'}
else {return 'unknown'}}


Per DOIF rumpel ich dann auf den AV-Receiver raus: (Ist nicht besonders elegant, funktioniert aber :-D )
defmod WZ_DI_CubeDrehen DOIF ([AQ_Cube:rotate] eq "right" \
and [?OnkyoAVR:power] eq "on")\
(set OnkyoAVR VolumeUp)\
DOELSEIF\
([AQ_Cube:rotate] eq "right45" \
and [?OnkyoAVR:power] eq "on")\
(set OnkyoAVR VolumeUp)(set OnkyoAVR VolumeUp)\
DOELSEIF\
([AQ_Cube:rotate] eq "left" \
and [?OnkyoAVR:power] eq "on") \
(set OnkyoAVR VolumeDown)\
DOELSEIF\
([AQ_Cube:rotate] eq "left45" \
and [?OnkyoAVR:power] eq "on") \
(set OnkyoAVR VolumeDown)(set OnkyoAVR VolumeDown)\
DOELSE
attr WZ_DI_CubeDrehen do always
attr WZ_DI_CubeDrehen room Automatisierung,Wohnzimmer
attr WZ_DI_CubeDrehen wait 0:0,0.5:0:0,0.5


Gruß, mimo
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: Schlimbo am 14 März 2020, 07:18:36
Hallo zusammen,
erst mal vielen danke für die Bereitstellung der Userreadings, das hat mir bei der Auswertung viel Zeit erspart.

Da der Würfel aber auch die Readings "temperature" und "battery" bereitstellt, würde eine Temperatur/Batterie Änderung auch ein triggern der userreadings bewirken und so ungewollt Aktionen ausführen.
Desshalb habe ich für die userreadings noch den Trigger Parameter gesetzt.

action:^\d{4}$ bzw. rotate:^-?\d+$

Anbei meine angepassten Attribute inkl. der letzten Modifikationen von Papaloewe & mimo84:
attr Zauberwuerfel1_action userReadings
first:^\d{4}$
{my $string = ReadingsVal($name,"state","");;
my $first  = substr($string, 0, 1);;
  {return $first}},
last:^\d{4}$
{my $string = ReadingsVal($name,"state","");;
my $last  = substr($string, 3, 1);;
  {return $last}},
action:^\d+$
{my $string = ReadingsVal($name,"state","");;
my $first  = substr($string, 0, 1);;
my $last   = substr($string, 3, 1);;
my $sum   = ($first + $last);;
if ($first eq "7") {return 'shake'}
elsif ($first eq $last) {return 'doubletap'}
elsif ($last eq "0") {return 'move'}
elsif ($sum eq "7") {return 'flip-180'}
elsif ($first gt "0" and $first lt "7") {return 'flip-90'}
else {return 'unknown'}},
side:^\d{4}$
{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:^\d{4}$
{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'}}


attr Zauberwuerfel1_angle userReadings
rotate:^-?\d+$ {my $state = ReadingsVal($name,"state","");;
if ($state > 9000) {return 'right90'}
elsif ($state > 4500) {return 'right45'}
elsif ($state > 0) {return 'right'}
elsif ($state < -9000) {return 'left90'}
elsif ($state < -4500) {return 'left45'}
elsif ($state < 0) {return 'left'}
else {return 'unknown'}}


Gruß Schlimbo
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: ripperle am 19 Oktober 2020, 17:09:59
Hallo,

Das mit den User readings hat bei mit geklappt, danke dafür!

Ich habe noch das Problem das mein cube die rotate Bewegung nicht erkennt (also drehen ohne zu flippen)...
Das ist jetzt mal unabhängig vom User reading...

Hatte zuvor den cube mit zigbee2mqtt betrieben und da gieng das noch...
Ist das ein bekanntes Problem?

Gruß!

EDIT:
Problem gefunden! Deconz legt 2 seperat devices bei mir an...
Titel: Antw:deconz: Xiaomi Cube - Readings unklar
Beitrag von: rohlande am 26 Dezember 2020, 21:47:07
Vielen Dank für das Code Beispiel. Hätte ich Wochen gebraucht.
Läuft wunderbar. Hatte bisher den Cube via "zigbee2MQTT" angebunden.
Deconz finde ich aber besser.

Vg Denny


Zitat von: Papaloewe am 12 Februar 2019, 18:30:44
Nach einiger Pfriemelei komme ich zu einem anderem Ergebnis.
Vielleicht habe ich aber auch eine neuere, ältere Version des Zauberwürfels?
Vielleicht hilft es ja jemandem. Viel Erfolg.
MfG
Thomas


defmod Zauberwuerfel1_action HUEDevice sensor 8  IODev=deCONZ
attr Zauberwuerfel1_action IODev deCONZ
attr Zauberwuerfel1_action icon xiaomi_cube
attr Zauberwuerfel1_action room HUEDevice,Wohnen
attr Zauberwuerfel1_action stateFormat Aktion: action\
Seite:  side
attr Zauberwuerfel1_action userReadings first \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
  {return $first}}, \
last \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $last  = substr($string, 3, 1);;;; \
  {return $last}}, \
action \
{my $string = ReadingsVal("Zauberwuerfel1_action","state","");;;;\
my $first  = substr($string, 0, 1);;;; \
my $last   = substr($string, 3, 1);;;; \
if ($first eq "7") {return 'shake'} \
elsif ($first eq $last) {return 'doubletap'}  \
elsif ($last eq "0") {return 'move'} \
elsif ($first gt "0" and $first lt "7") {return 'flip'} \
  else {return 'unknown'}}, \
side \
{my $string = ReadingsVal("Zauberwuerfel1_action","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("Zauberwuerfel1_action","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'}}


defmod Zauberwuerfel1_angle HUEDevice sensor 10  IODev=deCONZ
attr Zauberwuerfel1_angle IODev deCONZ
attr Zauberwuerfel1_angle icon xiaomi_cube
attr Zauberwuerfel1_angle room HUEDevice,Wohnen
attr Zauberwuerfel1_angle stateFormat Drehrichtung: rotate
attr Zauberwuerfel1_angle userReadings rotate \
{my $state = ReadingsVal("Zauberwuerfel1_angle","state","");;;; \
if ($state gt 0) {return 'right'} \
elsif ($state lt 0) {return 'left'} \
  else {return 'unknown'}}