Verknüpfung mit IP Symcon oder Homematic?

Schönen Tag,

Ich habe mir einen Homatic IP Bewegungsensor und zwei Homematic Funkschaltaktoren besorgt.

Ist es möglich das ich eine Verknüpfung der zwei Funkschaltaktoren und des Bewegungssensor über IP Symcon realisieren kann?

Sprich der Sensor erkennt eine Bewegung und schaltet die beiden Aktoren.

Oder mit der ccu3?

Danke euch.

Hallo michl,
das ist möglich mit IP-Symcon. Sobald der Bewegungsmelder Bewegung erkennt kannst du mit einem Ereigniss darauf reagieren und z.B. die Funkschaltaktoren schalten.

In der CCU3 habe ich es tatsächlich noch nicht gemacht, aber dort sollte es auch möglich sein die Geräte direkt zu Verknüpfen.

Direktverknüpfungen in der CCU funktionieren meines Wissens nach, nicht zwischen Homematic IP und Homematic Geräten

du hast die Möglichkeit sie über die CCU3 zu verbinden oder über IP Symcon. Die Frage was der bessere Weg ist, hängt davon ab wie sehr du noch eingreifen möchtest. Wenn du das schalten von Bewegungsmeldern noch beeinflussen möchtest. Stabiler ist in der CCU3, flexibler bist du in IPS. Beides geht

Ich habe kein IP Geräte aber wenn es funktioniert würde ich einer Direktverbindung immer den Vorzug geben.

1 „Gefällt mir“

Danke für die Infos.

Ich denke ich muss das ganze mit IPS Automatisieren.

Der Bewegungsmelder von Homematic registriert nur eine Bewegung, jedoch wird die Helligkeit nicht berücksichtigt. Sprich der sobald eine Bewegung erkannt, wird auch unter Tag schaltet dieser die Aktoren. Also die Helligkeit wird nicht immer übertragen, nur bei bewegung.

In IPS habe ich die möglichkeit, mit “Location” unter Kern Instanzen, das ich zwischen Tag, und nicht Tag Unterscheiden könnte.

Habt Ihr eine Idee wie ich das umsetzen könnte?

Nimm einfach ein fertiges Modul. Dort kannst Du eintragen, was Deine Bedingungen sind.

Ansonsten ein Ereignis anlegen, was auf den Melder reagiert und unter Bedingung kannst Du dann Tag festlegen.

Ich hab mal ChatGPT gefragt:

<?php
/******************************************************
 * Bewegung -> Licht (nur bei Nacht/Tag=false)
 * IP-Symcon / Symcon
 * Schalten via RequestAction
 ******************************************************/

// === KONFIGURATION: HIER IDs EINTRAGEN ===
$MOTION_VAR_ID = 12345;  // ID der Bewegungsmelder-Variable (Bool)
$TAG_VAR_ID    = 23456;  // ID der Bool-Variable "Tag" (true = Tag, false = Nacht)
$LIGHT_OBJ_ID  = 34567;  // ID des zu schaltenden Licht-Objekts (mit RequestAction)

// === LOGIK ===
// Das Skript sollte durch ein Ereignis auf $MOTION_VAR_ID getriggert werden.
// Bei Bewegung (true) und Nacht (Tag=false) -> Licht AN.
// Bei Bewegung (true) und Tag=true -> nichts tun.
// Optional: Bei Bewegung=false könnte man Licht AUS schalten (siehe Kommentar unten).
// Sicherstellen, dass wir vom Variablen-Trigger kommen:
if (isset($_IPS['SENDER']) && $_IPS['SENDER'] === 'Variable') {
    $changedVarId = $_IPS['VARIABLE'];
    $newValue     = $_IPS['VALUE'];
    // Nur reagieren, wenn es wirklich die Bewegungsmelder-Variable ist
    if ($changedVarId === $MOTION_VAR_ID) {
        // Bei Bewegung = true prüfen wir die Tag-Variable
        if ($newValue === true) {
            $isDay = GetValueBoolean($TAG_VAR_ID); // true = Tag, false = Nacht
            if ($isDay === false) {
                // Nacht -> Licht einschalten
                RequestAction($LIGHT_OBJ_ID, true);
            } else {
                // Tag -> nichts tun (Licht bleibt wie es ist)
                // // Falls du am Tag explizit ausschalten willst, entkommentieren:
                // RequestAction($LIGHT_OBJ_ID, false);
            }
        } else {
            // OPTIONAL: Wenn keine Bewegung mehr erkannt wird, Licht ausschalten:
            // RequestAction($LIGHT_OBJ_ID, false);
        }
    }
} else {
    // Manuelles Ausführen des Skripts (z. B. im Editor): 
    // Hier passiert standardmäßig nichts. Optional kannst du Testlogik einfügen.
    // echo "Skript wird normalerweise durch ein Ereignis auf die Bewegungsmelder-Variable gestartet.";
}

Danke dir für deine Hilfe!

Es funktioniert sowet, jedoch hab ich zwei Schaltaktoren die ich auslösen möchte.

Ich habe zwar den zweite in das Script zugefügt (ID) aber es wird immer der erste geschltet?

Kann ich auch eine Zeit hinterlegen, das beide Aktoren nach 5 min wieder abschalten?

<?php
/******************************************************
 * Bewegung -> Zwei Lichter (nur bei Nacht/Tag=false)
 * - Einschalten via RequestAction
 * - 5-Minuten-Auto-Off (Timer retriggered bei jeder Bewegung)
 * - Sofort AUS, wenn Tag=true wird
 * - Zusätzlicher Nachlauf: x Sekunden nach Bewegungsende
 *   (falls keine neue Bewegung kommt)
 * IP-Symcon
 ******************************************************/

// === KONFIGURATION: IDs anpassen ===
$MOTION_VAR_ID = 12345;  // ID Bewegungsmelder (Bool)
$TAG_VAR_ID    = 23456;  // ID Bool "Tag" (true=Tag, false=Nacht)
$LIGHT1_ID     = 34567;  // ID Licht 1 (RequestAction-fähig)
$LIGHT2_ID     = 45678;  // ID Licht 2 (RequestAction-fähig)

$OFF_DELAY_MIN      = 5;   // Minuten bis Auto-AUS (Langtimer)
$END_GRACE_SECONDS  = 30;  // Sekunden Nachlauf nach Bewegungsende

// === INTERN ===
$OFF_DELAY_SEC = max(1, $OFF_DELAY_MIN * 60);
$SELF_ID       = $_IPS['SELF']; // Skript-ID
$END_TIMER_NAME = "AutoLightOff_EndGrace"; // Event-Name für Nachlauf

// --- Hilfsfunktionen ---
function lights_on($id1, $id2) {
    RequestAction($id1, true);
    RequestAction($id2, true);
}
function lights_off($id1, $id2) {
    RequestAction($id1, false);
    RequestAction($id2, false);
}
function schedule_end_grace_timer($scriptId, $eventName, $seconds, $light1, $light2) {
    $eid = @IPS_GetObjectIDByName($eventName, $scriptId);
    if ($eid === false) {
        $eid = IPS_CreateEvent(1);                // zyklisches Event
        IPS_SetParent($eid, $scriptId);           // unter diesem Skript ablegen
        IPS_SetName($eid, $eventName);
        // Beim Auslösen: Lichter aus, ScriptTimer stoppen, Event deaktivieren
        $eventScript =
            'RequestAction('.$light1.', false); ' .
            'RequestAction('.$light2.', false); ' .
            'IPS_SetScriptTimer('.$scriptId.', 0); ' .
            '$eid=@IPS_GetObjectIDByName("'.$eventName.'", '.$scriptId.'); ' .
            'if($eid!==false){IPS_SetEventActive($eid,false);}';
        IPS_SetEventScript($eid, $eventScript);
    }
    // Einmalig auf "jetzt + seconds" stellen
    $t = time() + max(1, (int)$seconds);
    IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 0);   // kein echter Zyklus
    IPS_SetEventCyclicDateFrom($eid, 0, 0, 0);
    IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $t), (int)date("i", $t), (int)date("s", $t));
    IPS_SetEventActive($eid, true);
    return $eid;
}
function deactivate_end_grace_timer($scriptId, $eventName) {
    $eid = @IPS_GetObjectIDByName($eventName, $scriptId);
    if ($eid !== false) {
        IPS_SetEventActive($eid, false);
    }
}

// === HAUPTLOGIK ===
switch ($_IPS['SENDER'] ?? '') {

    case 'Variable':
        $varId = $_IPS['VARIABLE'];
        $val   = $_IPS['VALUE'];

        if ($varId === $MOTION_VAR_ID) {
            // --- Bewegungsmelder hat getriggert ---
            $motion = (bool)$val;                   // true = Bewegung
            $isDay  = GetValueBoolean($TAG_VAR_ID); // true = Tag, false = Nacht

            if ($motion && !$isDay) {
                // Nacht + neue Bewegung -> Lichter AN, 5-Minuten-Timer neu
                lights_on($LIGHT1_ID, $LIGHT2_ID);
                IPS_SetScriptTimer($SELF_ID, $OFF_DELAY_SEC);
                // Nachlauf-Timer abbrechen, falls der noch lief
                deactivate_end_grace_timer($SELF_ID, $END_TIMER_NAME);

            } elseif ($motion && $isDay) {
                // Tag + Bewegung -> nichts einschalten; Timer stoppen
                IPS_SetScriptTimer($SELF_ID, 0);
                deactivate_end_grace_timer($SELF_ID, $END_TIMER_NAME);

            } elseif (!$motion) {
                // Bewegungsende -> kurzen Nachlauf starten
                schedule_end_grace_timer($SELF_ID, $END_TIMER_NAME, $END_GRACE_SECONDS, $LIGHT1_ID, $LIGHT2_ID);
                // Langtimer (5 min) lassen wir weiterlaufen; wird
                // bei neuer Bewegung ohnehin neu gesetzt oder durch
                // EndGrace vorzeitig ausgeschaltet.
            }

        } elseif ($varId === $TAG_VAR_ID) {
            // --- Tag-Variable hat getriggert ---
            $isDayNow = (bool)$val;
            if ($isDayNow) {
                // Sofort AUS bei Tag
                lights_off($LIGHT1_ID, $LIGHT2_ID);
                IPS_SetScriptTimer($SELF_ID, 0);
                deactivate_end_grace_timer($SELF_ID, $END_TIMER_NAME);
            }
            // Bei Wechsel auf Nacht: nichts; Bewegung kümmert sich.
        }
        break;

    case 'TimerEvent':
        // Unterscheidung: ScriptTimer (kein $_IPS['EVENT']) vs. EndGrace-Event (mit EVENT)
        if (isset($_IPS['EVENT'])) {
            // EndGrace ist ausgelöst (Event-Skript schaltet ohnehin aus und deaktiviert sich).
            // Hier ist nichts weiter nötig, aber zur Sicherheit:
            lights_off($LIGHT1_ID, $LIGHT2_ID);
            IPS_SetScriptTimer($SELF_ID, 0);
            deactivate_end_grace_timer($SELF_ID, $END_TIMER_NAME);
        } else {
            // ScriptTimer (5 Minuten) ist ausgelöst -> AUS und EndGrace ebenfalls stoppen
            lights_off($LIGHT1_ID, $LIGHT2_ID);
            IPS_SetScriptTimer($SELF_ID, 0);
            deactivate_end_grace_timer($SELF_ID, $END_TIMER_NAME);
        }
        break;

    default:
        echo "Dieses Skript wird durch Bewegungsmelder, Tag-Variable, ScriptTimer (5 Min) oder EndGrace-Event ausgelöst.";
        break;
}

Einrichtung (kurz)

1\. IDs einsetzen.

2\. **Zwei Ereignisse** auf dieses Skript legen:

•	Bewegungsmelder → „Bei Aktualisierung/Änderung“ (idealerweise nur bei true),

•	Tag-Variable → „Bei Aktualisierung/Änderung“.

3\. Optional: $END_GRACE_SECONDS anpassen (Standard 30 s).

Verhalten

•	**Nacht & Bewegung (true):** Lichter AN, **5-Minuten-Timer** startet/verlängert sich; kurzer Nachlauf wird abgebrochen.

•	**Bewegungsende (false):** startet **Kurz-Nachlauf** (z. B. 30 s).

•	**Neue Bewegung vor Ablauf des Kurz-Nachlaufs:** Lichter bleiben an, **5-Minuten-Timer** wird neu gesetzt, Kurz-Nachlauf wird abgebrochen.

•	**Tag wird true:** Lichter **sofort AUS**, alle Timer gestoppt.

Klar geht auch ein Treppenhausmodul aber ich spiele gerade etwas herum. Module sind langweilig.

1 „Gefällt mir“

Also Boui, es funktioniert soweit sehr gut. Beide Schaltaktoren werden bei Bewegung eingeschaltet.

Der hinterlegte Timer im Script 5 min, ist jedoch nicht aktiv. Die Leuchten bleiben an?

Das Script starte ich mit einem bestimmten Wert “Bewgung”.

Du hast die beiden Ereignisse angelegt, wie beschrieben?

Ich muss zum Abendessen

1 „Gefällt mir“

Ich bedanke mich :slight_smile: Jetzt passt es soweit.