Bewegungsmelder mit fade und Einschaltzeit

Hallo,

komme leider nicht weiter bei meiner Umsetzung.

An Aus über Fade kriege ich hin, wenn es aber im
fade gerade ist und es soll in andere Richtung gehen,
dann blinkt es.

Meine Gedanke war das die Pirs esrt nach Sonnenuntergan
aktiv werden.
Diese dann über Pir eingeschaltet werden über fade
aber das die Einschaltdauer im Skript oder IPS gefeniert wird.
Sagen wir mal 1 Minute, pir wird aber für 10sek eingestellt.
Wird aber in der Minute der Pir ausgelöst, soll es wieder
eine Minute an sein.
Dann wenn es herunter gefadet wird und in der Zeit ein
Pir ausgelösst wird, das das runter faden abgebrochen
wird und hoch fadet.

Hat vielleicht jemand so einen ähnlichen Skript?
Oder könnte mit vielleicht jemand helfen?

Dankeschön

Hallo,

möchte das jemand gegen Entgelt machen?

Oder könnte mir bei Premium Support geholfen werden?

Gruß

Vielleicht schreibst Du mal wie das Skript aussieht mit dem Du ein- bzw. ausschaltest und was noch mal die genaue Zielstellung ist wie zu einer bestimmten Zeit oder für eine bestimmte Dauer schalten. Dann wird das glaube ich auch klarer und man kann Dir eher helfen.

Hallo Fronzo,

danke Dir für die Antwort!

Also Licht soll an gehen nur wenn Tag auf False steht
(Sonnenuntergang z.B.)

Dann soll das Licht langsam (1 Sek) heller werden bis
bestimmten Wert. (150 z.B)
Natürlich wenn der Pir auf 1 geschaltet wird, wenn der
auf 0 geht soll das Licht einstellbare Zeit noch an bleiben.
Wird aber der Pir wieder in der Zeit ausgelöst, soll
die Zeit ab null erneut ablaufen.

Nach der Ablaufzeit soll es herunter die Helligkeit gehen (1 Sek)

Wird in der Zeit wo herunter gedimmt wird ein Pir auf 1 gehen,
soll es herunter dimmen unterbrochen werden und
wieder hoch gefadet werdet.

So meine Vorstellung in etwa, so ähnlich möchte ich mehrere
kleine Leuchten ansteuern.

Mit den 2 Skripten mit den ich herum experementiert hab,
diese kommen sich in die Quere.
Wenn es herunter gedimmt wird und in der Zeit ein Pir
ausgelöst wird blinkt die Lampe.

Für einfaches An und Aus reicht es eigentlich…

 Code:

$start = GetValue(46838 /*[Außen Vorne\Hausnummernschild Pin4\Wert]*/); $ende = GetValue(12782 /*[Außen Vorne\Hausnummernschild Pin4\Fade Ziel AN]*/); for($i=$start; $i <= $ende; $i++) { ModBus_WriteRegister(56308 /*[Außen Vorne\Hausnummernschild Pin4]*/, $i); IPS_Sleep(1); //Fadetime in Sekunden  
  $start = GetValue(22596 /*[Außen Vorne\Hausnummernschild Pin4\Fade Ziel AUS]*/); $ende = GetValue(46838 /*[Außen Vorne\Hausnummernschild Pin4\Wert]*/); for($i=$ende; $i >= $start; $i--) { ModBus_WriteRegister(56308 /*[Außen Vorne\Hausnummernschild Pin4]*/, $i); IPS_Sleep(1); //Fadetime in Sekunden } ?>  

Hab im Forum nach einen Skript gesucht,
leider ohne Erfolg.

Gruß

Das kannst Du machen indem Du bei dem Ereignis das auslöst zusätzlich Weitere Bedingungen für die Ausführung festlegen ankreuzt und Du dann zusätzlich im Ereignis die Variable Ist es Tag der Location Instanz unter Kerninstanzen abfragst.

Alternativ kannst Du auch in dem Skript das getriggert wird, die Variable abfragen und in eine If else Schleife einbinden.


<? 
$LocationID = IPS_GetInstanceListByModuleID("{45E97A63-F870-408A-B259-2933F7EABF74}")[0]; 
$isday = GetValue(IPS_GetObjectIDByIdent("IsDay", $LocationID)); 
if($isday) // Tag
{ 
    // Befehl ausführen 
} 
else // Nachts 
{ 
    // Befehl ausführen
} 
?>

Wenn Du das ganze mit einem Timer zum Sonnenaufgang oder Untergang schalten willst kannst Du auch einen AstroTimer nutzten.

Das macht ja Dein Skript wenn ich das richtig verstanden habe.

Vielleicht hilft Dir da ja Treppenhauslichtsteuerung weiter.

Dann musst Du in der for Schleife die fadet zusätzlich innerhalb der Schleife prüfen ob der Wert des PIR 1 ist. Sollte das der Fall sein bricht Du die Schleife mit break ab.


$dimup = false;
for($i=$ende; $i >= $start; $i--)
{
$pir_state = GetValue(12345);
if ($pir_state == 1)
 {
        $dimup = true;
        break;   
    }
ModBus_WriteRegister(56308 /*[Außen Vorne\Hausnummernschild Pin4]*/, $i);
IPS_Sleep(1); //Fadetime in Sekunden
}
if($dimup)
{
IPS_RunScript(12345); // Skript mit Befehl zum Hochdimmen
}

Hallo Fronzo,

vielen Dank für die Antwort!

Werde Deine Tipps später ausprobieren, bin gerade
unterwegs. Belese mich aber bis dahin.

Die einzelnen Befehle sind ja einer seitzt logisch klar.
If, else, elseif, break.

Aber das ganze in ein funktionierendes skript zu packen,
der auch sauber läuft… Das ist ja die Kunst.

Bin Dir echt dankbar für die Hilfe.

Edit: Der Link sieht schon viel Versprechend aus.
So dachte ich mir das in etwa. Denke dort dimmen oder faden
einzubauen wäre ja möglich.

Gruß

Hallo,

hab eben mein Glück probiert leider ohne Erfolg.
Das mit der Treppenlichtsteuerung klappt bei mir nicht,
da kann ich an ModBus irgendwie nichts machen.

Hab auch nen Skript probiert, er will auch net recht:

$LocationID = IPS_GetInstanceListByModuleID("{45E97A63-F870-408A-B259-2933F7EABF74}")[0]; 
$isday = GetValue(IPS_GetObjectIDByIdent("IsDay", $LocationID)); 
if($isday) // Tag
{ 
	for($i=$start; $i <= $ende; $i++) {
	ModBus_WriteRegister(56308 /*[Außen Vorne\Hausnummernschild Pin4]*/, $i);
	IPS_Sleep(1); //Fadetime in Sekunden    // Befehl ausführen 
	} 
	else // Nachts 
	{ 
	for($i=$ende; $i >= $start; $i--) {
	ModBus_WriteRegister(56308 /*[Außen Vorne\Hausnummernschild Pin4]*/, $i);
	IPS_Sleep(1); //Fadetime in Sekunden } ?>// Befehl ausführen
} 
?> 

Und da ist noch kein break eingebaut.
Ja alles gar nicht so einfach.

Gruß

Dein Skript passt so nicht. Zum einen hängt das else am Block der for-Schleife und nicht am if. Hier brauchst du eine geschweifte Klammer ( } ) mehr. Zum anderen hast du einen zusätzlichen PHP-Abschluss-Token ( ?> ) hinter dem zweiten IPS_Sleep, das müsste auch weg.

Hallo Fronzo,

konnte erst heute Deine Beispiele testen.
Das mit dem break funktioniert noch nicht bei mir, vielleicht übersehe ich was?

Zum hoch dimmen verwende ich diesen Script mit einem Ereignis (Pir = 1)


$start = GetValue(54210 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\Wert]*/); 
$ende = GetValue(57974 /*[Fade Zielwert 100]*/); 

	for($i=$start; $i <= $ende; $i++) { 
	ModBus_WriteRegister(20869 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3]*/, $i); 
	IPS_Sleep(1); //Fadetime in Sekunden
	}

Zum herunter dimmen, habe ich es so versucht:

$start = GetValue(54210 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\Wert]*/); 
$ende = GetValue(23492 /*[Fade Ziel 0]*/); 

$dimup = false;
for($i=$ende; $i >= $start; $i--)
{
$pir_state = GetValue(54210 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\Wert]*/);
if ($pir_state == 1)
 {
        $dimup = true;
        break;   
    }
ModBus_WriteRegister(20869 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3]*/, $i);
IPS_Sleep(1); //Fadetime in Sekunden
}
if($dimup)
{
IPS_RunScript(19928 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\AN Dimmen]*/); // Skript mit Befehl zum Hochdimmen
}

Was sagst Du ist es in etwa so richtige Richtung?
Blinken bekomme ich hin oder das er gar nicht an gehen will…

Dann hätte ich noch ne Frage:

Was macht dieses Befehl?

IPS_Sleep(1); //Fadetime in Sekunden

Wenn ich da eine 1 stehen habe, fadet es trotzdem 4-5 Sekunden bis 255.
Hat das einen Grund?

Danke Dir noch mal!

Gruß

Alexander

Und was geht jetzt genau nicht? Dimmt die Lampe wieder hoch wenn der PIR während dem herunter dimmen auslöst?

Siehe Dokumentation
IPS_Sleep
setzt eine Pause in Millisekunden, 1 pausiert also die for Schleife um jeweils 1 Millisekunde. Fadetime in Sekunden kannst Du damit nur begrenzt setzten, da ein Skript ja nur eine bestimmte Laufzeit haben kann, je nach Einstellung 30 Sekunden. daher kannst Du da nicht beliebig die Pausenzeit hochsetzten.

Hallo Fronzo,

hab minimal was geändert.
Beim Auslösen des Pirs blink die Leuchte,
glaune bei Deiner Version hatte der Skript
zum Herunterdimmen nicht funktioniert.

Gruß

Hallo Fronzo,

hab es eben ausprobiert noch mal.
Dein Beispiel so wie hier ist:

$start = GetValue(54210 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\Wert]*/); 
$ende = GetValue(23492 /*[Fade Ziel 0]*/); 

$dimup = false;
for($i=$ende; $i >= $start; $i--)
{ 
$pir_state = GetValue(54210 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\Wert]*/);
if ($pir_state == 1)
 {
        $dimup = true;
        break;   
    }
ModBus_WriteRegister(20869 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3]*/, $i);
IPS_Sleep(1); //Fadetime in Sekunden
}
if($dimup)
{
IPS_RunScript(19928 /*[Erdgeschoss\Abstellraum\Abstellraum Ledstrip Pin3\AN Dimmen]*/); // Skript mit Befehl zum Hochdimmen
}

Blockiert komplett die Instanz. Der Pir reagiert nicht mehr.
Also eher gesagt der Skript für Dimmen An wird nicht ausgeführt.

Versuche ich Befehle zu testen oder den Skript aus diesem Beitrag zu starten,
hängt sich das Programm auf.

Edit: Nach Neustart des Servers faden nur hoch IPS runter gar nicht.

Edit2: hier war auch ein Fehler:

$pir_state = GetValue(36290 /[Erdgeschoss\Abstellraum\Bewegungsmelder Abstellraum Pin37\Wert]/);

Erfolg brachte den PIR auszuwählen auch nicht.

Gruß

Hallo,

das mit dem Fade über IPS habe ich weg gelassen.
Das macht jetzt der Arduino, IPS sendet nur gewünschte Werte ab!

Danke euch für die Hilfe!

Gruß