(gelöst) Aeon Multisensor

von März 2013 bis heute :

Ich glaube das zeigt zumindest schon mal, wo die Prioritäten nicht liegen…

Flipper

Falls es noch wer braucht:

Ich habe mal ein Script geschrieben, dass die Werte des Multisensors via Cutter und RegVar in entsprechende Variablen (Temperatur, Helligkeit, Luftfeuchte) schreibt:
img_017.jpg

Einfach irgendwo (in IPS natürlich :slight_smile: ) ein neues Script anlegen, den Code unten reinkopieren, die ID des Seriellen Ports (an dem das Z-Wave Dongle hängt) und die IDs der AEON Multisensoren eintragen und einmal ausführen.
Danach wird das Script immer, wenn Daten von einem der Sensoren kommen ausgeführt.
Ich hoffe, dass es auch bei anderen funktioniert.

29.11.13 Update: Habe heute meinen 2. AEON Mutlisensor bekommen und festgestellt, dass das Script nicht richtig funktioniert wenn man mehrere Multisensoren einträgt. Das sollte jetzt aber gehen.


<?
// Legt Cutter, RegVar und die Variablen: Temperatur, Helligkeits, Luftfeuchte pro Aeon Sensor an

/*
Anleitung:
1) Code in ein neues script kopieren
2) Unter Konfig die ID der des Serial Ports sowie die IDs der Aeon Multisenoren eintragen
2) Script einmal manuell starten


*/
//  Konfig
$id_serial = 39650 /*[Serial Port]*/ ;
$senor_ids = array(14391 /*[Hardware\Z-Wave-Geräte\Flur EG\Aeon Multisensor - PIR]*/,
                   54308  /*[Hardware\Z-Wave-Geräte\Flur OG\Aeon Multisensor - PIR]*/
						 );
$logname = "multisens_generator";



//-------------------------------------------------------------
// ------------------------------------------------------------
// Z-Wave Gateway bestimmen
foreach (IPS_GetInstanceList() as $id)
	{
	$inst = IPS_GetInstance($id);
	if ($inst['ModuleInfo']['ModuleID'] == '{2D7CA355-2C51-4430-8F67-4E397EAAEA19}')
		$zw_konf = $id;
   if ($inst['ModuleInfo']['ModuleID'] == '{43192F0B-135B-4CE7-A0A7-1475603F3060}')
	   $ach = $id;
	}
// Alle bekannten ZW-Nodes finden:

if (!($devices = ZW_GetKnownDevices($zw_konf)))
	{
	$err = 'Keine Z-Wave Geräte gefunden.';
	IPS_LogMessage($logname, $err);
	die ($err);
	}

if ($_IPS['SENDER'] == 'Execute')
	{
	if (!(@is_array($senor_ids)))
		{
		$err = 'Keine Aeon Multisensoren angegeben.';
		IPS_LogMessage($logname, $err);
		die ($err);
		}
	if (!($id_serial))
		{
		$err = 'Kein Serieller Port angegeben.';
		IPS_LogMessage($logname, $err);
		die ($err);
		}
		
	foreach($senor_ids as $senor_id)
		{
		echo "---------------------------
";
		if (!(@$name = IPS_GetName($senor_id)))
			{
			$err = 'Fehler: Sensor ID: '.$senor_id.' falsch';
			IPS_LogMessage($logname, $err);
			die ($err);
			}
		echo "Erzeuge für ".$name." (".$senor_id.")
";

		foreach ($devices as $dev)
			{
			if ($senor_id == $dev['InstanceID']) $node_id = $dev['NodeID'];
			}
		$sync = dechex($node_id)." 06 31 05";
		echo "sync code für Cutter ist ".$sync."
";
		// Syncstring generieren
		$sync_string = "";
		$syn = explode(" ", $sync);
		foreach ($syn as $hex)
			{
			$sync_string .= chr(hexdec($hex));
			}

		$cutter_prop = array(   "ParseType"       => 1,
										"SyncChar" 			=> $sync_string,
										"DeleteCutChars"  => 0,
										"InputLength"     => 8,
										"Timeout"         => 1
			);
		// Schauen ob Cutter schon existiert
		$cutter_id = "";
		foreach (IPS_GetInstanceListByModuleType(2) as $id)
			{
			$inst = IPS_GetObject ($id);
		   if ($inst['ObjectIdent'] == $senor_id)
		      {
			   $cutter_id = $id;
			   echo "Cutter ".$inst['ObjectIdent']." vorhanden. Benutze: $cutter_id
";
			   }
			}

		if (!(@$cutter_id))
			{
			$cutter_id = IPS_CreateInstance("{AC6C6E74-C797-40B3-BA82-F135D941D1A2}");
			IPS_SetIdent($cutter_id, $senor_id);
			echo "Lege neuen Cutter an: $cutter_id
";
			}
	 	IPS_SetName($cutter_id, "Cutter for ".$name);
		IPS_ConnectInstance($cutter_id, $id_serial);
		foreach($cutter_prop as $prop => $val)
			{
			IPS_SetProperty ( $cutter_id , $prop , $val );
			}
		IPS_ApplyChanges($cutter_id);


	// Register Variable erstellen
		if (!(@$registervar_id = IPS_GetObjectIDByIdent($senor_id, $cutter_id)))
		   {
			$registervar_id = IPS_CreateInstance("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
			IPS_SetParent($registervar_id, $cutter_id);
			IPS_SetIdent($registervar_id, $senor_id);
			echo "Lege neue Register Variable an: $registervar_id
";
			}
	   IPS_SetName($registervar_id, "Reg-Var for ".$name);
		IPS_ConnectInstance($registervar_id, $cutter_id);
	   IPS_SetProperty ($registervar_id , "RXObjectID" , $_IPS['SELF'] );
	   IPS_ApplyChanges($registervar_id);
	}
}
if ($_IPS['SENDER'] == 'RegisterVariable')
	{
	$variablen = array( 	"Temperatur" 	=> "~Temperature",
	                     "Helligkeit"   => "~Illumination",
	                     "Luftfeuchte"  => "~Humidity"
	                     );

	$decimal_bytes = array();

	for ($i=0; $i < strlen($_IPS['VALUE']); $i++)
		{
		$decimal_bytes[$i] = intval(ord($_IPS['VALUE'][$i]), 16);
		}

	$from_node = $decimal_bytes[0];
	// passende Instanz anhand der Node-ID finden
	foreach ($devices as $dev)
		{
		if ($dev['NodeID'] == $from_node) $senor_id = $dev['InstanceID'];
		}
	// Variablen erstellen/suchen
	$name 	= "Temperatur";
	$ident 	= "IdentTemp";
	$profile = "~Temperature";
	if (!(@$temp_id = IPS_GetObjectIDByIdent($ident, $senor_id)))
	   {
  		$temp_id = IPS_CreateVariable (2);
	   IPS_LogMessage($logname, "Lege neuen Temperatur Variable an: $temp_id");
		IPS_SetParent($temp_id, $senor_id);
		IPS_SetIdent($temp_id, $ident);
      IPS_SetName($temp_id, $name);
		IPS_SetVariableCustomProfile($temp_id, $profile);
		IPS_SetPosition($temp_id, 100);
		AC_SetLoggingStatus($ach,$temp_id,TRUE);
		AC_SetAggregationType($ach,$temp_id,0);
		AC_SetGraphStatus($ach,$temp_id,TRUE);
		}
	$name 	= "Helligkeit";
	$ident 	= "IdentIllu";
	$profile = "~Illumination";
	if (!(@$illu_id = IPS_GetObjectIDByIdent($ident, $senor_id)))
	   {
  		$illu_id = IPS_CreateVariable (1);
	   IPS_LogMessage($logname, "Lege neuen Helligkeit Variable an: $illu_id");
		IPS_SetParent($illu_id, $senor_id);
		IPS_SetIdent($illu_id, $ident);
      IPS_SetName($illu_id, $name);
		IPS_SetVariableCustomProfile($illu_id, $profile);
		IPS_SetPosition($illu_id, 101);
		AC_SetLoggingStatus($ach,$illu_id,TRUE);
		AC_SetAggregationType($ach,$illu_id,0);
		AC_SetGraphStatus($ach,$illu_id,TRUE);
		}
	$name 	= "Luftfeuchte";
	$ident 	= "IdentHum";
	$profile = "~Humidity";
	if (!(@$hum_id = IPS_GetObjectIDByIdent($ident, $senor_id)))
	   {
	   IPS_LogMessage($logname, "Lege neuen Luftfeuchte Variable an: $hum_id");
  		$hum_id = IPS_CreateVariable (1);
		IPS_SetParent($hum_id, $senor_id);
		IPS_SetIdent($hum_id, $ident);
      IPS_SetName($hum_id, $name);
		IPS_SetVariableCustomProfile($hum_id, $profile);
		IPS_SetPosition($hum_id, 102);
		AC_SetLoggingStatus($ach,$hum_id,TRUE);
		AC_SetAggregationType($ach,$hum_id,0);
		AC_SetGraphStatus($ach,$hum_id,TRUE);
		}
      
      
	switch ($decimal_bytes[4])
		{
		case 1:
			$temperatur = $decimal_bytes[7] / 10;
	//		echo "Temperatur: ".$temperatur;
			SetValue($temp_id, $temperatur);
			break;
		case 3:
			$lux = $decimal_bytes[7];
	//		echo "Lux: ".$lux;
			SetValue($illu_id, $lux);
			break;
		case 5:
			$feuchte = $decimal_bytes[6];
	//		echo "Feuchte: ".$feuchte;
			SetValue($hum_id, $feuchte);
			break;
		}
	}
?>


Ich habe so ein Gerät bestellt und schaue mir das genauer an, sobald es da ist :slight_smile:

paresy

Will mir gerade den 2ten Sensor bestellen, da das Teil wirklich gut ist, habe aber nicht mehr im Kopf ob ich ich die aktuelle Version des Scriptes am Laufen habe, oder die vom 29.11. An welcher markanten Änderung kann ich das sehen, ohne jetzt das ganze Script durchsuchen zu müssen?

Schön wäre eine Versionsnummer im Script …

super! :loveips:

@U.d.o

Hast recht, Versionsnummer wäre wohl sinnvoll. Gibt´s dann beim nächsten Mal. :slight_smile:

Schau mal hier:


        // Schauen ob Cutter schon existiert
        $cutter_id = "";

Ich hatte vergessen die cutter_id zurück zu setzten.

Hi,
habe auch diesen Sensor und habe das Script mal laufen lassen (mit den richtigen IDs für Seriellen Port und den Multisensor).

Leider wird nur der Cutter erstellt, aber die Variablen für Temperatur etc. nicht…

Habe ich was vergessen :confused:

Danke und Grüße

vermutlich die Assoziativgruppen anzupassen

Frag mich nicht was ich gemacht habe, aber auf einmal waren die Variablen da und die Werte werden regelmäßig angepasst.

Danke! :D:D:D

Fix im nächsten Update. Es werden alle zusätzlichen Variablen unter der Hauptvariable erstellt. Ihr könnt die Variablen dann nach Bedarf per Link wieder „höher“ setzen.

Für alle die das Thema nicht gelesen haben: Wichtig ist, dass der Parameter 101 auf 224 oder 225 steht. Ansonsten werden die Werte nicht übertragen :wink:

paresy

@furby284

vielen Dank.

hab gerade per post meinen ersten multisensor bekommen.

Mit deinem skript funktionierts perfekt. Man muss sich nur gedulden, bis die variablen erscheinen.
die kommen glaub erst nach dem ersten „Datenempfang“ vom Sensor…

da war das anlernen des sensors schon „nerviger“… die fibaros zuvor waren nicht so zickig…wie das teil…
egal jetzt ist er angelernt :slight_smile:

Hi,

funktioniert prima, bleibt für mich nur eine Verständnisfrage, nämlich wann der Status aktualisiert wird.
Hier erkenne ich nur ab und zu eine Änderung, die meiste Zeit ist der Status „aus“ dann mal wieder für unbestimmte Zeit „an“.
Eine Bewegungsmeldung wird also nicht registriert ?

Hi,

funktioniert prima, bleibt für mich nur eine Verständnisfrage, nämlich wann der Status aktualisiert wird.
Hier erkenne ich nur ab und zu eine Änderung, die meiste Zeit ist der Status „aus“ dann mal wieder für unbestimmte Zeit „an“.
Eine Bewegungsmeldung wird also nicht registriert ?[/QUOTE]

Also an, ist bei mir bei „Bewegung“. der Status bleibt auf „AN“ so lange ich dies eingeschalten habe.
Je nach Batterie + oder Netzbetrieb. (Beim mir Batteriebetrieb -> Standard 4 Minuten).

Damit könnte mal eine Leuchte ein und nach 4 Minuten wieder ausschalten.
Ob der Status „AN“ jetzt auch erscheint wenn der Multisensor gerade in seinem Datensendeintervall steckt - habe ich noch nicht geprüft.

Ich hab ja selbst nur das Problem, dass das TEil bei jeder Bewegung schaltet unabhängig von der Helligkeit.
D.h. der Multisensor macht keinen Sinn um eine Leuchte - ohne IPS - zu schalten (durch Verwendung der Alarmklasse)… das war meine ursprüngliche Intention. Bewegungsmelder für „abends/nachts“ der autark einen Fibaro Aktor ansteuert. … nun muss ich mir das ganze in IPS überlegen…

Hier mal ne Info
aeotec_multisensor_tech.pdf (148 KB)[QUOTE=fred0409;218870]

So jetzt klappt’s.

Statusabfrage FALSE = OK, TRUE = Alarm gesetzt
Parameter 3 (Motion Timeout) auf 60 sec gesetzt

Die Assoziation in Gruppe 1 des Sensors zu einem Aktor kann ich zwar zuordnen,
das Schalten funktioniert bei mir aber nicht.
Dies wird nun über ein ausgelöstes Ereignis bei Änderung der Statusvariable des Sensors erreicht.
Vielleicht gibt es da ja noch einen anderen Ansatz ?

Also bei mir hat das funktioniert -> Aber: es gibt einen ALARM Parameter.
Diesen muss man für den Multisensor setzen.
Um diesen setzen zu können, muss man den sensor ja wieder aufwecken… und wenn er gesetzt ist, dann muss man die Werte neue einlesen (mit dem jeweiligen ZWAVE Gateway… z.b. aeon labs v2 usb)…
so hats bei mir geklappt… wobei der Multisensor - wie erwähnt - dann bei bewegung immer schaltet.
Unabhängig davon wie hell oder dunkel es ist… D.h. eine Leuchte damit zu schalten bei Tag - wäre naja :-)…

Hallo zusammen,

ich habe nun auch einen solchen Sensor und konnte ihn soweit auch einrichten. Sensordaten werden aktualisiert und Bewegungen werden erkannt (über Data- oder StatusVariable, je nach Konfiguration von Parameter 5 [1:Basic Set; 2: Binary Sensor Report]).

Leider wird die Status-/ Data-Variable nach jedem WakeUp (gemäß WakeUp-Intervall, nicht der Sensor-Report) auch auf true und nach eingestellter Zeit wieder auf false gesetzt, obwohl gar keine Bewegung detektiert wird.

Das kann doch so nicht gewollt sein, ist es bei euch auch so?

Moin,

das selbe Problem habe ich auch. Der wird nur aktualisiert wenn man eine Aktualisierungsabfrage macht. Hat keiner eine Idee ? So bringt der Bewegungsmelder ja nix.

VG

Andreas

Hi Wuppi83,

ich vermute, Du hast den „Erzwinge Basic Klasse Haken“ nicht gesetzt. Der Sensor funkt bei mir einwandfrei, der Status ist die DATA-Boolean (ich habe diese nur in „Bewegungsmelder Flur vorn“ umbenannt):

Das wars :0) Hammer danke dir !!!

Gibts hier jemand der mir ganz kurz den Basis-Einstieg ermöglicht? Hab nen Z-Stick S2, einen Aeon Multisensor.
Konfigurator angelegt, Stick gefunden (Node 1) und den Multisensor (Node 8), beide „Erstellt“ aber ab dem Konfigurator versteh ich nix mehr. Das „Laden“ geht mal, mal nicht, mal kann ich eine Gruppe zuordnen, mal geht der Button gar nicht auf. Muss ich jetzt „Basis-Klasse erzwingen“ auswählen oder nicht, beides war bislang ohne Erfolg.
Dann muss man den Parameter 101 setzen habe ich gelesen, aber da funktioniert nix, die App meckert nur nicht, wenn ich den Knopf am Sensor gedrückt halte, aber er scheint ihn trotzdem nicht zu setzen… verstehe nur Bahnhof

Bei mir hat es mit dem anlernen (ebenfalls per Z Stick S2) ohne PC nicht geklappt…
Der normale Ablauf (so wars bei anderen Fibaro KOmponenten), Z-Stick vom IPS PC abstecken und mitnehmen,
Knopf an dem Stick drücken (blinkt dann), dann die neue ZWAVE Komponente aktivieren (meißt mit 3x drücken eines Tasters), der Z Stick leuchtet dann auf und ist dann fertig…
-> Hat bei mir da nicht geklappt.

Alternative (z-tool von Homeseer Software auf einem Laptop oder dem IPS PC installieren)
gibts unter: http://www.homeseer.com/downloads/legacy.htm

  • IPS beenden.
  • z-tool starten,
  • auf den Z Stick Gateway zugreifen lassen
  • im Multisensor Batterien einlegen / Strom anschliessen, Knopf drücken
  • „add device“ im Z-Tool drücken
    -> schon müsste ein neues Device angezeigt werden

Sobald ein neues Device gefunden wurde, kann man das Z-Tool beenden, IPS Starten und sich über ein neues Device in IPS freuen.

Dort muss man natürlich in den Z Wave Konfigurator rein, vermutlich noch „Erzwinge Basic Klasse“, Klassen neu laden. (Beim Klassen neu einlesen, muss man den Sensor wahrscheinlich ebenfalls wieder aufwecken (strom aus/an)…

Ich hoffe es ist verständlich… aber das waren so meine Erfahrungen mit dem Stick und Zwave Devices…
mal gehts portabel, mal nur mit der Anlernsoftware…

P.S. Das Laden der Parameter des Sensor funktioniert -wahrscheinlich - deshalb nicht, da das Teil für den Batteriebetrieb einen Stromsparmodus hat. D.h. der Sensor meldet sich z.B. nur alle 5 Minuten. Diesen Wert kann man einstellen.
Je nachdem ob man Batterie oder Netzteilbetrieb verwendet.
Ich habe im Batteriebetrieb mal auf jede Minute umgestellt… da waren die AKkus in ca. 3 - 4 Monaten leer.
Es ist eh so, sobald der Sensor Bewegung erkennt werden die Infos sofort übertragen.
Für die Bewegung gibt es ein Zeitfenster. D.h. wenn bewegung erkannt, dann wartet der Sensor x Sekunden/minuten bis zur nächsten Bewegung + Datenübertragung.

FÜr mich ist er als Bewegungsmelder gedacht, der halt zusätzlich Temperatur/Luftfeuchtigkeit mitbringt…