HM Bewegungsmelder - Dauernde MOTION

Hi,

ich habe 3 Homematic Bewegungsmelder ins IPS eingefügt. Diese Devices wurden auch ordnungsgemäß erkannt und IPS hat die entsprechenden Variablen angelegt.

Jetzt habe ich jedoch das Problem, dass IPS kontinuierlich MOTION meldet, obwohl der Bewegungsmelder keine Bewegung mehr meldet…

Hat jemand ein ähnliches Problem und kann mir einen Tip geben?

Viele Grüße
Sascha

Wenn sich HMs ähnlich verhalten wie FS20, dann gibt es kein „Ausschalten“. Du musst das Zurücksetzen per Script nach bestimmter Zeit selber erledigen.

Hm, das ist ja seltsam. die HM CCU bekommt den „Keine Bewegung“ Status ja auch irgendwie mit.

Was für Werte (Zeit) sind denn da aus „Erfahrung gut“? Also wann könnte man die MOTION selber zurücksetzen?

Wenn du den Status gelesen hast setzt du ihn zurück. Null Millisekunden Verzögerung. IMO wird die CCU das auch so machen.

Toni

Wie kann ich die MOTION Variable denn verändern? IPS meldet mir beim setzen des Wertes dass es eine „NUR LESEN“ Variable ist. Oder was meint ihr mit „Status zurücksetzen“?

Ich hab keine Homematic. Aber man in Status-Variablen grundsätzlich nicht schreiben weil sie den Status anzeigen und eben nur anzeigen… Hilft dir [u]das hier[/u]?

Toni

Hallo zusammen,

habe soeben festgestellt das ich das problem seit dem update auch habe.

Und vorher hat es funktioniert ohne das ICH den status zurück gesetzt habe, meines wissens sollte das über die funktion:

Status von externen Geräten empfangen (Bewegungsmelder).
und
Von extern empfangenem Timer emulieren.

funktionieren, option in der instanz des Bewegungsmelders (FS20).

Gruß Michael

Hallo,

habe bei mir schon immer nur „Motion“ angezeigt.
Finde das ist auch ganz normal und macht keine Probleme.

Ich trigger einfach mein Skript auf „aktualisierung“ so wie bei anderen HomeMatic-Variablen auch. Ich setzt nichts zurück oder so.

z. B. Bewegungsmelder im Garten.
Habe ein Skript für die Außenbeleuchtung, welche 3 Minuten an geht bei Triggerung der Motion variable per Aktualisierung.
Die 3 Minuten setzte ich direkt beim Licht einschalten „Duration“.

ASICS

wenn es normal wäre, wäre es vor dem update ja auch so gewesen, oder ?

Gruß Michael

Leider bin ich mir nicht ganz sicher aber ich kenne es nur mit „Motion“ und ich habe die ersten Skripte mit Bewegungsmelder vor ca. 6-7 Monaten geschrieben. Wenn die Variable damals anders war hätte ich mein Skript anders geschrieben…

Dann hätte ich „bei Änderung“ genommen und auch die Variable anderweitig verwendet.

ASICS

… für HM:

  1. „MOTION“ > „Versteckt“
  2. Variable vom Typ Boolean anlegen & Variablenprofil: „~Motion.HM“
  3. Skript:
$id_piri = 34742; // *[EG\Kleine Klasse\PIRI\Präsenz]*
if($IPS_SENDER == "Variable"){

	if($IPS_VALUE == True){  //Timer starten
		IPS_SetScriptTimer($IPS_SELF, 5 * 60);    // X - Minuten
		$prae =  GetValue($id_piri);
		if($prae == False){
			SetValue($id_piri, True);
			// weitere Schalt - Befehle
 		}
	}
}

if($IPS_SENDER == "TimerEvent"){
 	IPS_SetScriptTimer($IPS_SELF, 0);
 	SetValue($id_piri, False);
 	// weitere Schalte - Befehle
}

MST

wf_hm_piri.png

Naja, MOTION steht da ja auch eigentlich immer oder? Nur entweder wird es bei Wert TRUE oder FALSE anders hinterlegt?

Ich habe mir in der neuen Version auch ein anderes Profil angelegt um den Werten TRUE und FALSE eine andere Bezeichnung anzeigen zu lassen (Bewegung erkannt und keine Bewegung).

Ich denke, dass es ein Fehler sein muß, da sich ja auch die Helligkeitswerte verändern. Diese stimmen immer mit der Meldung der Homematic CCU überein. Nur die MOTION wird nicht korrekt angezeigt. Hier ist irgendwie der Wurm drin.

Wie das ganze in der „alten“ Version war kann ich gar nicht mehr sagen. Müsste das sobald Zeit ist mal testen. Aber vielleicht kann hier ja noch ein anderer Homematic’ler mehr Infos nachliefern.

Viele Grüße
Sascha

Das Script schafft zwar einen Workarround, mir persönlich würde aber die Lösung des Problems besser gefallen, da ich nicht bei jedem neuem Bewegungsmelder ein Script erstellen müsste. Ich jemand der möglichst viel gerne schlank hällt, da viele Lösungen das ganze eh schon genug aufblähen.

Ist es denn wirklich ein Bug in IPS? Oder wodran könnte das liegen?

Viele Grüße aus dem Auto (auf dem Weg nach Nürnberg) :slight_smile:

Grüße
Sascha

Es ist kein Bug, denn IP-Symcom zeigt nur das an, was die CCU sendet. Und beim Bewegungsmelder sind es nur die True Impulse. Wenn du also willst, dass der Wert zurückgesetzt wird, musst du das Skript von steiner verwenden.

paresy

Verstehe ich das Script richtig so?

  • Das Script bei JEDEM True-Impuls des Bewegunsmelders aufgerufen
  • Das Script setzt einen Timer von 5 Minuten nachden es sich erneut aufruft
  • Es wird überprüft ob Präsenz auf False steht, wenn ja dann wird True gesetzt
  • Nachdem 5 Minuten abgelaufen sind wird das Script durch das TimerEvent automatisch erneut aufgerufen und Präsenz auf False gesetzt.

Frage ist nun:
Wenn innerhalb der 5 Minuten eine erneute MOTION Meldung vom Präsenzmelder kommt, wird dann der TimerEvent automatisch wieder auf 5 Minuten verlängert, da ja erneut IPS-Script-Timer aufgerufen wird?

Laut Anleitung der Homematic-Komponente ist es so, dass eh nur alle 5 Minuten Bewegungsimpulse gesendet werden. Kollidiert der TimerEvent dann nicht mit dem erneuten MOTION Impuls und kommt als Resultat ein: Präsenz False -> True -> False -> True … heraus? Wenn ja, könnte man mit der Variablen keine Vernünftigen Trigger bauen.

Viele Grüße
Sascha

Wie muß ich denn das oben genannte Script triggern?

  • Muss ich ein Ereignis auf MOTION legen?
  • Beim Ereignis „Bei Variablenaktualisierung“ oder „Bei Variablenänderung“ ?

Bzw. um ein Script zu entwickeln, welches ohne Anpassungen läuft bräuchte man eine Funktion die die Instanz-ID der Variablen zurückliefert, der sie zugeordnet ist. Gibt es eine solche Funktion?

Viele Grüße
Sascha

Habs… IP-Symcon ist echt mächtig…


<?
$id = $IPS_VARIABLE;

echo "ME: $IPS_SELF
";
$instances = IPS_GetInstanceList();

foreach ( $instances as $item )
{
	$vars = IPS_GetStatusVariableIdents($item);
	
	foreach ( $vars as $var )
	{
   	$values = IPS_GetStatusVariable($item, $var);
		if ( $values['VariableID'] == $id )
		{
		   echo "Instanz: $item
";
		   
		   $ObjektID = @IPS_GetObjectIDByName("PRAESENZ", $item);
			if ($ObjektID == 0)
				echo "Objekt nicht gefunden!";
			else
				echo "Die Objekt-ID lautet: ". $ObjektID;
		}
	}

}
?>

Ging auch einfacher :slight_smile:


<?
$obj         = IPS_GetObject($IPS_SELF);
$instance    = $obj['ParentID'];
$praesenz_id = @IPS_GetObjectIDByName("PRAESENZ", $instance);

if ($IPS_SENDER == "Variable" || $IPS_SENDER == "Execute" )
{
	if ($praesenz_id != 0)
	{
		SetValue($praesenz_id, True);
		IPS_SetScriptTimer($IPS_SELF, 10);
	}
}

if($IPS_SENDER == "TimerEvent")
{
	IPS_SetScriptTimer($IPS_SELF, 0);
	SetValue($praesenz_id, False);
}
?>

@ saschahb

das Forum bietet verschiedene Tags für verschiedenen Code an. Es wäre schön wenn dieses auch genutzt wird, so kann man den Code leichter auseinander halten. Bitte künftig php-Code in die php-tag setzen.

Sorry, meine assoziation mit dem Tag PHP-Code war eine andere :slight_smile: Aber wird zukünftig erledigt! :slight_smile: