HM Bewegungsmelder soll bei Dunkelheit Lampe anschalten

Hi,

folgende Situation:

HM Außen Bewegungsmelder soll bei Dunkelheit und Bewegung einen HM Aktor schalten.

Das Licht soll dann 20 Sekunden anbleiben und danach wieder ausgehen.

Hierfür würde ich gerne die über das Astro Skript erzeugten Zeiten nutzen.

Das Skript soll bei Sonnenuntergang starten und bei Sonnenaufgang enden.

26788 --> Sonnenuntergang
50211 --> Sonnenaufgang

Habe schon mal bisschen probiert


<?

define("Bewegung",true);
define("Untätig",false);

$bewegung = GetValueBoolean(32530 /*[Haus\Erdgeschoss\Eingang\Bewegungsmelder Eingang \Bewegung]*/);

if ($bewegung == true)
{
HM_WriteValueFloat(34810 /*[Haus\Obergeschoss\Kinderzimmer\Deckenlampe]*/, "ON_TIME", 20); //
}

?>



Bei dem Skript wurden noch keine Start bzw. Endzeiten berücksichtigt.

Leider funktioniert es trotzdem nicht.

Wenn der Bewegungsmelder auf „Bewegung“ springt, dann bleibt leider die Lampe aus.

Bitte um eure Hilfe…

Was ist denn der Trigger für dieses Skript ? Also wann wird es aufgerufen ? Läuft das zyklisch ?

Ich hab bei mir einfach ein Ereignis an die BWM Variable gehängt. Wenn true, dann skript starten…

Müsste wohl einfach ein Auslösendes Ereignis an das Skript hängen, das auf die BWM Variable verweist oder?

Aber muss ja noch die Zeit mit einbauen…Also ab Sonnenuntergang starten und bei Sonnenaufgang beenden.

Viele Wege führen nach Rom…

Ich hab das bei mir so gelöst


$time=(date('H:i'));


if
	(($Rolladen<0.1) && ($time > $UZ1) && ($time <= $UZ2))
  {
		PJ_DimRGBW(28698 /*[Haussteuerung\Flur\Beleuchtung]*/,0,0,200,2,0,0,0,0);
		PJ_DimRGBW(52450 /*[Haussteuerung\Flur\Beleuchtung\RGBW-868 (Flur II)]*/,0,0,150,2,0,0,0,0);
	 }


Das ganze wird ausgelöst wenn die Bewegungsvariable des BWM auf true geht. Licht geht nur an, wenn der Rolladen unten ist und die Zeit zwischen den vorgegebenen Werten ist. $UZ1 und $UZ2 hol ich mir aus dem Astroskript.

Simpel und funktioniert…geht vermutlich auch eleganter, aber so funktioniert es auf jeden Fall^^

HM kannst Du ja mit ON_TIME ein vorgegebene Einschaltzeit mitgeben, dann musst Du dich um das Ausschalten nicht kümmern.

Genau :slight_smile:

Gruß
Martin


<?

define("Bewegung",true);
define("Untätig",false);

$Zeit = date ("Hi");
$Nachts = "1850";
$Tag = "0650";
$bewegung = GetValueBoolean(32530 /*[Haus\Erdgeschoss\Eingang\Bewegungsmelder Eingang \Bewegung]*/);

If ((($Zeit > $Nachts) || ($Zeit < $Tag)) && ($bewegung == true))

{
HM_WriteValueFloat(34810 /*[Haus\Obergeschoss\Kinderzimmer\Deckenlampe]*/, "ON_TIME", 20); //
}

?>

Dieses Script müsste doch nun den Aktor zwischen 18.30 Uhr und 6.30 Uhr bei einer Bewegung einschalten oder?

Brauche ich trotzdem das auslösende Ereignis der BWM Variable, welche ich an das Script hänge? Habe das jetzt mal so gemacht.

Leider bleibt meine test lampe aus :frowning:

Ja, woher soll das skript sonst wissen, das es starten soll ?^^

und prüf nochmal deine Variablen - keine Ahnung ob der Syntax der $Zeit Variable so funktioniert…

<?

define("Bewegung",true);
define("Untätig",false);


$Sonnenaufgang = GetValueString(50211 /*[Skripte\AstroSkript\Sonnenaufgang]*/ );
$Sonnenuntergang = GetValueString(26788 /*[Skripte\AstroSkript\Sonnenuntergang]*/);
$Zeit = date ("Hi");
$bewegung = GetValueBoolean(32530 /*[Haus\Erdgeschoss\Eingang\Bewegungsmelder Eingang \Bewegung]*/);

If ((($Zeit > $Sonnenuntergang) || ($Zeit < $Sonnenaufgang)) && ($bewegung == true))

{
 HM_WriteValueFloat(34810, "ON_TIME",  10);
 HM_WriteValueBoolean(34810 /*[Haus\Obergeschoss\Kinderzimmer\Deckenlampe]*/, "STATE", true);
}

?>


Als auslösendes Ereignis habe ich die BWM Variable genommen.

So ich habe es geschafft :slight_smile:

Hallo,

ich habe nochmals kurz eine Frage an die Profis…

ich würd egerne bei diesem Script…


 <?

define("Bewegung",true);
define("Untätig",false);


$Sonnenaufgang = GetValueString(50211 /*[Skripte\AstroSkript\Sonnenaufgang]*/ );
$Sonnenuntergang = GetValueString(26788 /*[Skripte\AstroSkript\Sonnenuntergang]*/);
$Zeit = date ("Hi");
$bewegung = GetValueBoolean(32530 /*[Haus\Erdgeschoss\Eingang\Bewegungsmelder Eingang \Bewegung]*/);

If ((($Zeit > $Sonnenuntergang) || ($Zeit < $Sonnenaufgang)) && ($bewegung == true))

{
 HM_WriteValueFloat(34810, "ON_TIME",  10);
 HM_WriteValueBoolean(34810 /*[Haus\Obergeschoss\Kinderzimmer\Deckenlampe]*/, "STATE", true);
}

?> 

Zusätzlich ab 22.30 Uhr bis zum Sonnenaufgang einen weiteren Aktor auch für eine bestimmte Zeit (20 Sekunden) einschalten…

ObjektID: 51413

Kann ich das in das vorhandene Script mit einbauen?

Hallo,

wie müsste das Script aussehen, wenn

bei untätig das Licht aus gehen soll aber erst nach 3 Minuten und wenn in der Zeit keine erneute Bewegung erst aus?

bis jetzt funktioniert alles aber geht halt bei Untätig direkt aus.


IPSUtils_Include ('IPSLight.inc.php', 'IPSLibrary::app::modules::IPSLight');
$TV = getvalueboolean(33618 /*[Skripte\WatchDog Lan\WatchDog Lan\Samsung]*/);
$lightManager = new IPSLight_Manager();
$sensor = getvalueboolean(55656 /*[Hardware\Sensoren\Bewegungsmelder Wohnzimmer\Bewegung]*/);
$Sonnenaufgang = GetValueString(51294 /*[Program\IPSLibrary\data\modules\Weather\IPSTwilight\Values\SunriseBegin]*/ );
$Sonnenuntergang = GetValueString(14108 /*[Program\IPSLibrary\data\modules\Weather\IPSTwilight\Values\SunriseEnd]*/);
$Zeit = date ("Hi");

If($sensor == true)
{
 If ((($Zeit > $Sonnenuntergang) || ($Zeit < $Sonnenaufgang)) && ($TV == true))
     {
     IPSLight_SetProgram(43302 /*[Program\IPSLibrary\data\modules\IPSLight\Programs\ScenenProgram]*/, 3);
     }
 else If ((($Zeit > $Sonnenuntergang) || ($Zeit < $Sonnenaufgang)) && ($TV == false))
     {
     IPSLight_SetSwitch(33238 /*[Program\IPSLibrary\data\modules\IPSLight\Switches\Kueche Durchgang]*/,true);
     }
}
 else If($sensor == false)
     {
     
     $lightManager->SetGroup(35623 /*[Program\IPSLibrary\data\modules\IPSLight\Groups\All]*/, false);
     }

Für IPSLibrary gibt es einen eigenen Bereich, da es keine offizielle IPS-Erweiterung ist. Besser Du stellst solche Fragen dort.

Hallo,

ich möchte gerne, dass dieses script meinen Aktor von 18.30 bis 21.59 bei einer Bewegung einschaltet.

Leider schaltet er aber jetzt den ganzen Tag bei einer Bewegung und nicht nur in der gewünschten Zeitspanne.


<?

define("Bewegung",true);
define("Untätig",false);


$Zeit = date ("Hi");
$Nachts = "1830";
$Tag = "2159";
$bewegung = GetValueBoolean(32530 /*[Haus\Erdgeschoss\Eingang\Bewegungsmelder Eingang \Bewegung]*/);

If ((($Zeit < $Nachts) || ($Zeit > $Tag)) && ($bewegung == true))

{
 HM_WriteValueFloat(52658 /*[Haus\Erdgeschoss\Eingang\Außenlampe Eingang]*/, "ON_TIME",  30);
 HM_WriteValueBoolean(52658 /*[Haus\Erdgeschoss\Eingang\Außenlampe Eingang]*/, "STATE", true);


}

?>



Könnt ihr mir da bitte helfen???

Date ist Datum, oder?

Bin kein PHP-Freak, Time ist die Zeit, oder?

Gruß Helmut

Hallo,

Wenn ich Deine „IF“ Bedingung richtig interpretiere, soll Dein Licht zwischen 0 und 18.30h und nach 21.59h angehen? Ist das so gewollt?

Grüße Kalle Wirsch

If ((($Zeit > $Nachts) && ($Zeit < $Tag)) && ($bewegung == true))
versuchs einmal damit

Ne das soll eigentlich von 18.30 bis 21.59 laufen :slight_smile:

Test Test:

<?php
$datum = date("d.m.Y");
$uhrzeit = date("H:i");
$Nachts = "1850";
$Tag = "0650";
$Zeit = date ('Hi:i');
$Bewegung = false; /// Bewegung wäre dann getValueboolean eines Bewegungsmelder
If ((($Zeit > $Nachts) or ($Zeit < $Tag))and $Bewegung )

{
Echo "---";
}
echo $datum," - ",$uhrzeit," .", date('H:i'), " . ", $Tag," Uhr";
?>

Hallo dpoessl,

Dann sollte es nach Helmuts Testcode funktionieren, denn in der ursprünglichen If Bedingung war > und < verdreht.

Ich würde mir auch mit „echo“ die Uhrzeit ausgeben lassen und kontrollieren, ob der Vergleich wie gewünscht funktioniert, bzw. ob das Format der Uhrzeit in der Variable auch das gewollte ist.

Grüße

Kalle Wirsch

Hier würde das Skript jetzt zwischen 18.50 Uhr und 6.30 Uhr schalten, richtig?

Wenn ich jetzt aber von 18.30 Uhr bis 21.59 Uhr schalten will, müsste es dann so lauten?

<?php
$datum = date("d.m.Y");
$uhrzeit = date("H:i");
$Nachts = "1850";
$Tag = "2159";
$Zeit = date ('Hi:i');
$Bewegung = false; /// Bewegung wäre dann getValueboolean eines Bewegungsmelder
If ((($Zeit > $Nachts) or ($Zeit < $Tag))and $Bewegung )

{
Echo "---";
}
echo $datum," - ",$uhrzeit," .", date('H:i'), " . ", $Tag," Uhr";
?>

Irgendwie bin ich gerade verwirrt…sorry…

Verwirrt, kann ich…

Mach doch einfach mal zum Test die Variable $Zeit zu Deinem Freund, setze sie auf Werte die Du probieren willst:

$Zeit = "1230"; //date ('Hi:i');

Gruß Helmut