[Modul] ZigBee-DeCONZ

Hallo Silberstreifen,

Danke für die Antwort - da hat sich aber nix geändert - Windows ist gleich - Deutsch, Deconz ist ja in Englisch und nun die .80er Version, und Phoscon ist auf Deutsch eingestellt. Trotzdem ne Idee warum.

Grüße,
MaLu

Moin Jürgen,

bei der Winkelberrechnung hast Du dich um eine Stelle vertan. Du musst den Wert durch 100 teilen.
Ansonsten siehts schon mal gut aus.

Morgen Jürgen…

Habe heute Morgen auch mal auf die schnelle getestet…

Das mit der Stelle beim Winkel ist mir auch aufgefallen. Außerdem ist bei der zweiten Instanz für das Kippen auch eine Variable für den Winkel angelegt. Das müsste doch eher eine Integer sein, um die verschiedenen Kippbewegegungen zu interpretieren, oder?

Und an der Stelle auch mal vielen Dank fürs schnelle Einarbeiten!

Grüße Jochen

Hallo Jürgen,

ich habe mir die Umsetzung mal angeschaut.
Ich hätte gerne das Event unter allen Instanzen.
Gut finde ich die Abfrage des „gesture“ Wertes. Dieser kommt aber bei beiden ID’s.
Bei der Winkel ID kommt nur 8 (links) oder 7 (rechts).
Bei dem anderen:
0= bewegen
1= schütteln
2= fallen lassen
3= 90° kippen
4=180° kippen
5= bewegen
6= 2x aufsetzen
Deswegen folgender Vorschlag zur Umsetzung:

				if (property_exists($Payload, 'buttonevent')) {
					$this->RegisterVariableInteger('Z2D_Event', $this->Translate('Event'), '');
					$this->SetValue('Z2D_Event', $Payload->buttonevent);
					if (property_exists($Payload, 'gesture') && ($Payload->gesture == '7' || $Payload->gesture == '8')) {
						if (!IPS_VariableProfileExists('Angle.Z2D')) {
							IPS_CreateVariableProfile('Angle.Z2D', 2);
							IPS_SetVariableProfileIcon('Angle.Z2D', 'Repeat');
							IPS_SetVariableProfileText('Angle.Z2D', '', ' °');
							IPS_SetVariableProfileDigits('Angle.Z2D', 2);
						}
						$this->RegisterVariableFloat('Z2D_angle', $this->Translate('Angle'), 'Angle.Z2D');
						SetValue($this->GetIDForIdent('Z2D_angle'), round($Payload->buttonevent / 100 ,2));
					}elseif (property_exists($Payload, 'gesture')) {
						// don't create button and angle variables
					}else{
						$button = (int)($Payload->buttonevent / 1000);
						$state  = $Payload->buttonevent % 1000;

						if (!IPS_VariableProfileExists('ButtonEvent.Z2D')) {
							IPS_CreateVariableProfile('ButtonEvent.Z2D', 1);
							IPS_SetVariableProfileIcon('ButtonEvent.Z2D', 'Power');
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 0, $this->Translate('Initial Press'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 1, $this->Translate('Hold'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 2, $this->Translate('Release after press'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 3, $this->Translate('Release after hold'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 4, $this->Translate('Double press'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 5, $this->Translate('Triple press'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 6, $this->Translate('Quadruple press'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 7, $this->Translate('Shake'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 8, $this->Translate('Drop'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D', 9, $this->Translate('Tilt'), '',-1);
							IPS_SetVariableProfileAssociation('ButtonEvent.Z2D',10, $this->Translate('Many press'), '',-1);
						}

						$this->RegisterVariableInteger('Z2D_Button_'.$button, $this->Translate('Button')." ".$button, 'ButtonEvent.Z2D');
						SetValue($this->GetIDForIdent('Z2D_Button_'.$button), $state);
					}
				}
				if (property_exists($Payload, 'gesture')) {
					if (!IPS_VariableProfileExists('Gesture.Z2D')) {
						IPS_CreateVariableProfile('Gesture.Z2D', 1);
						IPS_SetVariableProfileIcon('Gesture.Z2D', 'Repeat');
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 0, $this->Translate('Slide'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 1, $this->Translate('Shake'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 2, $this->Translate('Drop'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 3, $this->Translate('Tilt 90°'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 4, $this->Translate('Tilt 180°'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 5, $this->Translate('Slide'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 6, $this->Translate('2x Knock'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 7, $this->Translate('Turn Clockwise'), '',-1);
						IPS_SetVariableProfileAssociation('Gesture.Z2D', 8, $this->Translate('Turn Counter Clockwise'), '',-1);
					}
					$this->RegisterVariableInteger('Z2D_Gesture', $this->Translate('Gesture'), 'Gesture.Z2D');
					SetValue($this->GetIDForIdent('Z2D_Gesture'), $Payload->gesture);
				}

Die Übersetzung für das Variablenprofil müsste dann noch gemacht werden.
Attain

so, sollte jetzt alles richtig sein. Bitte alle nochmal prüfen.

Viele Grüße
Jürgen

Prima.

Jetzt passt es.
Attain

Hallo,

ich hätte da mal ein kleines Problem.

Aufgrund der Wohnungsituation nutze ich nun 2 RaspberryPis mit ConBeeII Modul , getrennt eines pro Etage.

Ich IPS habe ich dafür entsprechend zwei Instanzen des ZigBee-DeConz, Client Socket und Splitter angelegt, das funktioniert mit kleine DNS-Probleme ansonsten gut.

Jetzt ist mir aber aufgefallen, das Gruppen, die ich in der Phoscon jewiele angelegt, identische GeräteID in den beiden ZigBee Configurator bekommen, beginnend mit 1, 2 usw.

Das führt aber zu Problem, IPS löscht beim anlegen der Objekte aus dem 2. Konfiuration die identischen aus dem ersten, da die Varibel für beide Geräte gleich sind - sich Screenshot im Anhang.

Könnte man dias irgentwie umgehen, das nicht die selben GeräteID’s benutzt werden und es somit zu Konflikten kommt ?

Hallo Tuxtom007,

das Problem ist mit der Version 1.23 behoben. Diese steht ab sofort auf dem Beta-Kanal und demnächst als Stable zur Verfügung.

Viele Grüße
Jürgen

Hallo Jürgen,

Supi, ich danke dir, werde direkt man updaten und testen.

Viele Grüße und schöne WE

Thomas

Tür-/ Fensterkontakte prellen gerne etwas. Der Aqara scheint jedes Signal trotzdem an Deconz weiterzugeben. Leider kommt es vor, dass anschliessend was verloren geht.

Kann ich den Status selbst regelmässig abgleichen?

Zusatz: nach ca. 20 min hat die Ips Variable des Status aktualisiert. Ist das Zufall oder so vorgesehen?

nein, das ist kein Zufall. Alle 10min wird der Status aller Geräte vom Server geholt.
Viele Grüße
Jürgen

Hallo zusammen,

die Aqarasensoren funktionieren eigentlich sehr ordentlich. Manchmal jedoch nicht - insbesondere beim Testen, wenn häufige Veränderungen stattfinden. Vermutlich gibt es mir unbekannte Zeiten für Wiederholmessungen / - auslösungen. Leider geben die Anleitungen nicht viel her. Unbekannte Eigenschaften bewirken bei mir fehlendes Vertrauen in den Sensor.

Gibt es irgendwo Detailinfos?

Hallo Jürgen,
ich vermisse gerade den Befehl „Z2D_setColorEx($ID, $value, $Transitiontime)“ um fließende Farbübergänge zu bekommen. Könntest du den noch ergänzen?
Vielen Dank

Gruß
Rainer

Hallo Rainer,

guter Hinweis. Ist in der neuen Version enthalten.

Viele Grüße
Jürgen

Hallo Jürgen,

ich habe an die State Variable (Boolean) ein Aktionsskript gehängt.

<?

if ($_IPS['SENDER'] == "WebFront"){ 
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']); 
    if ($_IPS['VALUE']){ 
      IPS_RunScript(54560 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf auf]*/);
      echo "Ablauf auf";
    }
    else {
      IPS_RunScript(16761 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf zu]*/);
      echo "Ablauf zu";
    }
}

wenn ich das Gerät über WF ein- oder ausschalte wird das Skript aber nicht ausgeführt.
Funktioniert das nicht bei DeConz Geräten?

Gruß

Oliver

Hallo Oliver,
klar funktioniert das auch, ist aber unabhängig von DeConz nicht der schönste Weg. Wenn Du das trotzdem machen willst, und die Schaltfunktion erhalten bleiben soll, dann musst Du Dein Script wie folgt ändern

<?

if ($_IPS['SENDER'] == "WebFront"){ 
    RequestAction($_IPS['VARIABLE'], $_IPS['VALUE']); 
    if ($_IPS['VALUE']){ 
      IPS_RunScript(54560 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf auf]*/);
      echo "Ablauf auf";
    }
    else {
      IPS_RunScript(16761 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf zu]*/);
      echo "Ablauf zu";
    }
}

Viele Grüße
Jürgen

Hallo Jürgen,

ich mach das, weil manchmal die Kommunikation zw. IPS und Geräten wie Tasmota/Zigbee… nicht richtig funktioniert.
über das skript starte ich einen Timer, der immer wieder prüft, ob der Schaltzustand auch erreicht wurde. Geht das auch anders?

danke für den Hinweis, hab ich geändert, aber geht weiterhin nicht.

ich hab in mein Skript absichtlich einen Fehler eingebaut,

 <?
fehler

if ($_IPS['SENDER'] == "WebFront"){ 
    RequestAction($_IPS['VARIABLE'], $_IPS['VALUE']); 
    if ($_IPS['VALUE']){ 
      IPS_RunScript(54560 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf auf]*/);
      echo "Ablauf auf";
    }
    else {
      IPS_RunScript(16761 /*[Geräte\Zigbee\Garage\Wasserhahn Garage \Ablauf zu]*/);
      echo "Ablauf zu";
    }
}  

weil es mich gewundert hat. Das Skript wird gar nicht gestartet. Mache ich das genauso z.B. bei Tasmota Geräten, wird mein Aktionskript da als Fehlerhaft gekennzeichnet.

Gruß

Oliver

wie bindest Du das Script denn ein?

Bitte daran denken das RequestAction natürlich auch das Aktions-Skript ausführt.
Wenn es dann die gleiche Variable betrifft, passiert entweder nix (Abfrage auf Sender gleich WebFront vor RequestAction) oder es gibt eine Endlosschleife (RequestAction wird ausgeführt).
Michael

Hallo,

„ganz Normal“ über eigene Aktion.

Gruß

Oliver