[Modul] IPSShadowing

Manueller Modus wird gesetzt, wenn außerhalb der Fahrzeit der Beschattung eine Änderung des Levels gemeldet wird, dann geht IPSShadowing davon aus, dass die Beschattung über die manuellen Tasten bewegt wurde :wink:

Hallo Andreas,
das war auch meine Auffassung - tatsächlich habe ich mir die Level Variable des Homematic Aktors aber nun mal weggeloggt - der manuelle Modus wird gesetzt, obwohl es keine Änderung an der Level Variable gibt. Kann ich hier zur Analyse irgendwelche Details zuliefern?

Bei den Homematic Geräten habe ich mit dem neuen Modul die alte IPSShadowing Lösung ersetzt - das KNX Gerät kam neu dazu. Können vielleicht noch Wechselwirkungen aus der alten Installation da sein? IPSShadowing habe ich über die Library komplett deinstalliert - es scheint an der Homematic Variable aber noch Referenzen zum IPSLogger zu geben?

Gruß

PS: Anderer Ansatz: Prüft das Modul für das Setzen des manuellen Modus wirklich auf Änderung der Level Variable, oder wird hier ggf. auf Aktualisierung geschaut?

@Brownson ich habe nun sowohl den manuellen Modus als auch die Level Variable bei meinen 3 Homematic Konfigurationen mitgeloggt und nun mal in die aufgezeichneten Variablenänderungen geschaut - es ist sichtbar, dass der manuelle Modus hier überall ohne Veränderung der verlinkten Level Variable gesetzt wird. In meinen Beispielen scheint das um die 30 Minuten nach dem letzten Fahren durch da Modul zu passieren (was zumindest morgens und abends einmal passiert, wenn bei mir der Manuelle Modus durch die Regel zurückgesetzt wird). Ob diese 30 Minuten reproduzierbar sind kann ich gerade aber noch nicht sagen. Auftreten tut das wie gesagt nur bei Homematic Konfiguration - nicht bei KNX. Weitere Unterschied bei mir zu dem KNX Rolladen:

-Die Homematic Aktoren waren vorher im IPSShadowing der IPSLibrary in Verwendung. Das ist jedoch eigentlich deinstalliert.

-Die Homematic Aktoren verwenden bei mir ein .Reversed Profil.

Gerne steuere ich weitere Infos bei, die ggf. bei der Lösungsfindung helfen!

Gruß

EDIT:
Ich konnte gerade beobachten, dass der manuelle Modus mit Variablenaktualisierung (was die Homematic Devices im Gegensatz zu KNX regelmäßig zu tun schein) gesetzt wurde. In deinem Modul habe ich die folgende Stelle gefunden:

	public function MessageSink($TimeStamp, $SenderID, $Message, $Data) {
		if ($Message == VM_UPDATE) {
			$programID = $this->GetIDForIdent('Program');
			$manualSec = $this->ReadPropertyInteger('PropertyTimeManual');
			$programTS = IPS_GetVariable($programID)['VariableUpdated'];
			$this->SendDebug('MessageSink', "Received VM_UPDATE Value=".$Data[0].", PrgTS=".date('H:i:s', $programTS).", CurrTS="
			                               .date('H:i:s', time()).", RefTS=".date('H:i:s', $programTS + $manualSec), 0);
			if ($programTS + $manualSec < time() and !$this->GetValue('ManualMode') and $manualSec > 0) {
				if ($this->GetValue('Automatic')) {
					$this->SetValue('ManualMode', true /*ManualMode*/);
				}
				$this->SetValue('Control',    1    /*Stop*/);
				$this->SendDebug('MessageSink', "Apply ManualMode=Y", 0);
			}
		}
	}

Müsste der Abruf auf $programTS = IPS_GetVariable($programID)[‚VariableUpdated‘] hier nicht auf [‚VariableChanged‘] gehen?

Das ist der TimeStamp der letzten Änderung am Programm, das ist eher nicht das Problem.

Aktuell wird der Timestamp der LevelVariable aber nicht ausgewertet und das ist die Ursache Deines Problems.

Folgende Änderung sollte Dein Problem lösen:


	// -------------------------------------------------------------------------
	public function MessageSink($TimeStamp, $SenderID, $Message, $Data) {
		if ($Message == VM_UPDATE) {
			$programID = $this->GetIDForIdent('Program');
			$programTS = IPS_GetVariable($programID)['VariableUpdated'];
			$levelID   = $this->ReadPropertyInteger('PropertyLevelID');
			$levelTS   = IPS_GetVariable($levelID)['VariableChanged'];
			$manualSec = $this->ReadPropertyInteger('PropertyTimeManual');
			$this->SendDebug('MessageSink', "Received VM_UPDATE Value=".$Data[0].", PrgTS=".date('H:i:s', $programTS).", LevelTS="
			                               .date('H:i:s', $levelTS).", RefTS=".date('H:i:s', $programTS + $manualSec), 0);
			if ($programTS + $manualSec < $levelTS and !$this->GetValue('ManualMode') and $manualSec > 0) {
				if ($this->GetValue('Automatic')) {
					$this->SetValue('ManualMode', true /*ManualMode*/);
				}
				$this->SetValue('Control',    1    /*Stop*/);
				$this->SendDebug('MessageSink', "Apply ManualMode=Y", 0);
			}
		}
	}

Kannst Du bitte mal testen :thinking:

Ich habe die module.php mal entsprechend deinem Vorschlag angepasst - nun kriege ich aber diverse interessante Fehler - beim Öffnen der Instanz in der Verwaltungskonsole z.B. die folgende?

EDIT: Ein zurückdrehen auf die alte module.php hat das Problem gelöst, aber was genau kann der Fehler sein? Habe ich was bei der Bearbeitung der Datei falsch gemacht, oder wie kommt es zu so einem Fehler? @paresy

Hast Du eventuell eine Klammer zu viel bzw. zu wenig?

Ich habe mal den Zeilenumbruch entfernt - ggf. lag es daran - die Klammern hatte ich eigentlich extra abgezählt - jetzt scheint es aber soweit zu funktionieren. Ich beobachte seit gestern Abend - trotz Variablenaktualisierung der Level Variable wurde der manuelle Modus bisher nicht gesetzt. Übernimmst du die Änderung ins Modul?

Gruß

Danke für das Feedback - Update ist online :wink:

Update ist installiert - danke für das tolle Modul!