deconz: Xiaomi Cube - Readings unklar

Begonnen von Gunther, 15 Oktober 2018, 10:28:58

Vorheriges Thema - Nächstes Thema

Gunther

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/

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?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

LordVoodoo

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

Gunther

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?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

LordVoodoo

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

Gunther

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...
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

LordVoodoo

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

Gunther

Ja manuell.

Habe schon gesucht, finde aber den Fehler leider nicht...
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Papaloewe

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

CoolTux

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

Papaloewe

Da gebe ich dir recht, nur das Verschieben ist x000, aber sonst eigentlich logisch.
Das Kippen um 180° fehlt mir noch in meinem Userreading.

CoolTux

Viel interessanter ist das drehen auf einer Seite. Klappt das bei Dir. So wie im Werbevideo? Bei mir leider nicht.
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

Papaloewe

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?

CoolTux

Keine Ahnung. Bei mir passiert da gar nichts. Was verwendest Du als Gateway?
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

Papaloewe

Mittlerweile bin ich auf den ConBee Stick gewechselt.

CoolTux

Dann muss ich das noch mal testen. Aktuell ärgert mich erstmal deCONZ mit 80% Prozessorlast nach 5 Stunden lauf.
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