Gegenteiliges schalten mit einem Script

Brauche mal ein bissel hilfe leider klapt mein script nicht ganz so wie es soll .

Mein script ist ein schalter er soll abends die lampen aus und morgen je nach zeit die lampen unterschiedlich hell an schalten aber ich hab mir leider irgendwo einen dreher reingebastelt er schaltet wie er lust hat.

$Dimmerwohn1=GetValueInteger("Dimmer_1");
$Dimmerwohn2=GetValueInteger("Dimmer_2");
$Dimmerwohn3=GetValueInteger("Dimmer_3");
$Dimmerwohn4=GetValueInteger("Dimmer_4");

$h=(int)date("H");
if ($h>=20)
{
FS20_SetIntensity(60778, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(13624, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(14327, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(13191, 0, 1);
}

if  (($Dimmerwohn1 == 0 )
 and ($Dimmerwohn2 == 0 )
 and ($Dimmerwohn3 == 0 )
 and ($Dimmerwohn4 == 0 ) )
 {
if ($h<4) FS20_SetIntensity(13191, 5, 1);
elseif ($h<5) FS20_SetIntensity(13191, 7, 1);
elseif ($h<6) FS20_SetIntensity(13191, 13, 1);
elseif ($h>=6) FS20_SetIntensity(13191, 16, 1);

Hallo,

ist zwar ein bisschen undurchsichtig, aber außer der fehlenden } am Ende kann ich nichts falsches erkennen. Beobachte doch mal die Variablenwerte, dann kannst Du genauer sehen, was passiert.

Ich wünsche einen schönen Tag.

Christoph.

ohh die } ist aber da ich wollte nur nicht den rest drumm herum der nichts mit dem Licht zutun hat nicht auch noch posten is mir bein Kopieren verlohren gegangen


$Dimmerwohn1=GetValueInteger("Dimmer_1"); 
$Dimmerwohn2=GetValueInteger("Dimmer_2"); 
$Dimmerwohn3=GetValueInteger("Dimmer_3"); 
$Dimmerwohn4=GetValueInteger("Dimmer_4"); 

$h=(int)date("H"); 
if ($h>=20) 
{ 
FS20_SetIntensity(60778, 0, 1); 
IPS_Sleep(50); 
FS20_SetIntensity(13624, 0, 1); 
IPS_Sleep(50); 
FS20_SetIntensity(14327, 0, 1); 
IPS_Sleep(50); 
FS20_SetIntensity(13191, 0, 1); 
} 

if(
$Dimmerwohn1 == 0 and 
$Dimmerwohn2 == 0 and 
$Dimmerwohn3 == 0 and 
$Dimmerwohn4 == 0) 
{ 
if ($h>=6){FS20_SetIntensity(13191, 16, 1);}
if ($h == 5){FS20_SetIntensity(13191, 13, 1);}
if ($h == 4){FS20_SetIntensity(13191, 7, 1);} 
if ($h<4){FS20_SetIntensity(13191, 5, 1);} 
}


Nur so auf die schnelle…

Gruß Thomas

Danke Thomas ich werd mal übers WE probieren ob es so klapt

MFG Ken

Leider schaltet er nicht zu den erwünschten zeiten konnte aber nicht herausbekommen warum nicht

Hi!

Ich bin zwar auch kein PHP-Experte, würde es aber so probieren:

$Dimmerwohn1 = GetValueInteger("Dimmer_1");
$Dimmerwohn2 = GetValueInteger("Dimmer_2");
$Dimmerwohn3 = GetValueInteger("Dimmer_3");
$Dimmerwohn4 = GetValueInteger("Dimmer_4");

$h = date("H");

if ($h >= 20)
{
FS20_SetIntensity(60778, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(13624, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(14327, 0, 1);
IPS_Sleep(50);
FS20_SetIntensity(13191, 0, 1);
}

if ($Dimmerwohn1 == 0)
{
	if ($Dimmerwohn2 == 0)
	{
		if ($Dimmerwohn3 == 0)
		{
			if ($Dimmerwohn4 == 0)
			{
	if ( ($h >= 6) && ($h < 20) )
	{
	FS20_SetIntensity(13191, 16, 1);
	}
		if ($h == 5) 
		{
		FS20_SetIntensity(13191, 13, 1);
		}	
			if ($h == 4) 
			{
			FS20_SetIntensity(13191, 7, 1);
			}
				if ($h < 4)
				{
				FS20_SetIntensity(13191, 5, 1);
				}
			}
		}
	}
} 

Hallo,

immerhin die Vorschlagscodes werden immer Komplizierter. Beschreibe doch mal, wie Dein Script schaltet.

Was ist Dimmer_1 bis _4?

Warum schaltet Du Abends versch. Geräte aus und tagsüber immer nur ein Gerät ein?

Warum schreibst DU

if  (($Dimmerwohn1 == 0 ) and ($Dimmerwohn2 == 0 )....

und nicht

if  (($Dimmerwohn1 == 0 ) && ($Dimmerwohn2 == 0 )....

? Aber das wird evtl. klar, wenn wir wissen, was in Dimmer_1 …_4 steht.

Ich wünsche einen schönen Abend.

Christoph.

@Professorakiera:
zum besseren Verständnis deines Aufbaues: nochmal

[ol]
[li]Dimmer_1 … _4: sind damit die Statusvariablen (Helligkeit) in der FS20TX Instanz gemeint?
[/li][li]Aufruf des Scriptes jede Stunde? (date(„H“))
[/li][li]alle Instanzen ausschalten und nur eine Instanz einschalten (#13191)?
[/li][li]Ist das dein vollständiges Script oder nur ein Ausschnitt?
[/li][/ol]Falls mein Ansatz richtig ist, wird dieser Abschnitt nicht funktionieren:

if( 
$Dimmerwohn1 == 0 and 
$Dimmerwohn2 == 0 and 
$Dimmerwohn3 == 0 and 
$Dimmerwohn4 == 0) 
{ 
if ($h>=6){FS20_SetIntensity(13191, 16, 1);} 
if ($h == 5){FS20_SetIntensity(13191, 13, 1);} 
if ($h == 4){FS20_SetIntensity(13191, 7, 1);} 
if ($h<4){FS20_SetIntensity(13191, 5, 1);} 
} 

Nur die Zeile,
if ($h<4){FS20_SetIntensity(13191, 5, 1);}
wird vor 4 Uhr richtig funktionieren. Danach ist der Dimmerwert der Instanz #13191 <> 0 und die erste Bedingung nicht mehr erfüllt.

Günter.

also dann erkläre ich mal was ich damit mache
abends schalte ich licht senarien mit 4 Dimmern
morgens soll er je nach Tageszeit einen von den Dimmern anschalten ich brauche nicht ne festbeleuchtung um zum Duschen zu gehen.

Das ganze script schaltet meine Nachttischlame.Sprich ich lege mich ins Bett schalte die Nachttischlampe an und es soll das Licht im Wohnzimmer ausgehen.
Morgens schalte ich die Nachtischlampe wieder an und im Wohnzimmer soll es so hell sein das ich Ins Bad finde.je nach dem das die uhr zeigt möchte ich aufwachen dabei oder nur das Klo finden g

Ach und übrigens das if xxxx mit and klapt sehr gut ich nurze es schon länger;)

Dann ist das aber so, wie es Spawn schon schrieb, dass das Script nur einmal schaltet und dann bei dieser Leuchtintensität bleibt, so wie es jetzt ist.

Ist das so gewollt?

Also wenn du vor 4 Uhr aufstehst, dann wird die Stärke auf 5 gestellt und bleibt dann so, auch wenn du dich wieder hinlegst und später nochmal aufstehst und die Nachttischlampe anschaltest;)

Bitte bezeichne mal welche Dimmerinstancen wo sind, ich verstehe das Script nicht so ganz. Sind die Dimmer im Haus verteilt? und soll früh nur eine Dimmerinstance mit den verschiedenen Helligkeitsstufen je nach Zeit geschalten werden? Und warum müssen alle anderen Dimmer hier aus sein…
:confused:

MfG Thomas

Hi Thomas und nancilla
also erstmal zu nancilla
ich denke du legst dich so wie jeder andere mensch in der Nacht weider hin
in meinem schript (Nachttischlampe aus) steht das er die lampen aus machen soll
also gehe ich abends ins bett will ich mit nachttisch an wohnzimmer aus machen ansonsten mache ich immer mit nachttisch aus auch wohnzimmer aus also doppelt.Ich möchte nur nicht das wenn ich im bett lese das licht im wohnzimmer immer noch an is.und nein ich habe keinen anderen schalter am bett frei.g

nun zu deiner Frage Thomas
Die Dimmer sollen aus sein damit wenn meine Freundin da is.
Stehe ich aufstehe (im dunkeln) und mache im Wohnzimmer das licht an und wenn sie dann aufsteht macht sie das nachttischlicht an.Sie würde mir dann das licht wieder dunkel machen.Alles klar.:rolleyes:

@Professorakiera

Das die „IF“-Funktion (grundlegend) funktioniert, nehme ich doch stark an.
Deine Beweggründe warum du wann , welche Lampen du wie schalten möchtest können wir auch vermuten, aber dass ist eigentlich auch nicht so wichtig. Das musst du schon selbst programmieren.

Wobei wir helfen können: das sind der Aufbau deines Algorithmus und die Fehler darin. Falls du noch weiterhin Hilfe benötigst, wäre es hilfreich die Antworten auf (z.B. meine) Fragen zu erhalten.

  • [li]Ist das dein vollständiges Script oder nur ein Ausschnitt?
    [/li][li]Wie wird dein Script getriggert:[ol]
    [/li][li]Zeitlich: Aufruf des Scriptes jede Stunde? (date(„H“))
    [/li][li]Timer: Aufruf des Scriptes über den TimerWizard?
    [/li][li]Ereignisorientiert: durch Lichttaster in den Räumen wo sich die Lampen befinden?
    [/li]Auch ob die Lichttaster die Dimmer direkt schalten oder ob du die Dimmer über IPS mit den Lichttastern bedienst.

[li]Was wird in den Variablen Dimmer_1 … _4 gespeichert? bzw. Was ist der Zweck dieser Variablen: sind damit die Statusvariablen (Helligkeit) in der FS20TX Instanz gemeint?
[/li]GetValueInteger(„Dimmer_1“);
[li]Lt. deinem Script: alle Instanzen ausschalten und nur eine Instanz einschalten (#13191)? Ich vermute doch du möchtest dein Licht am Klo wieder einschalten und nicht nur automatisch AUSschalten!
[/li][li]z.B: diese Zeile! if ($h<4){FS20_SetIntensity(13191, 5, 1);}
[/li]Wenn du Zeile zeitlich triggerst (z.B. jede Stunde) leuchtet diese Lampe (laut deinem Alogrithmus) von Mitternacht bis 20h am Abend mit ca. 31% der max. Helligkeit.
[li]oder diese Zeile! if ($h>=6){FS20_SetIntensity(13191, 16, 1);}
[/li]Falls diese Zeile jemals bei dir ausgeführt wurde leuchtet die Lampe durchgehend von 6h bis 20h mit 100%.
[/ol]

:slight_smile: Aber bitte, fasse mein Posting nicht als Kritik auf. Jeder User ist hier sicher bereit dir helfend unter die Arme zu greifen. :slight_smile:

Gruß
Günter

Also am besten arbeite ich mal deine Fragen nacheinander durch.

Ist das dein vollständiges Script oder nur ein Ausschnitt?

Nein es ist nich das Vollständige script in dem script ist noch der Befehl zum Nachttischlampe ausschalten.

Wie wird dein Script getriggert:

Ereignisorientiert das script ist auf den Nachttischlampen Taster Getriggert wenn True

Was wird in den Variablen Dimmer_1 … _4 gespeichert?

Dimmer 1 bis 4 sind die Vars von den 4 Dimmern im Wohnzimmer und ja es sind die Hellichkeiten.

Lt. deinem Script: alle Instanzen ausschalten und nur eine Instanz einschalten (#13191)? Ich vermute doch du möchtest dein Licht am Klo wieder einschalten und nicht nur automatisch AUSschalten!

Ich glaube du hast da etwas falsch ferstanden.g
Ich schalte je nach zeit entweder aus (alle Dimmer im WZ) oder eine Dimmer im WZ ein ==> Morgens an abends aus

z.B: diese Zeile! if ($h<4){FS20_SetIntensity(13191, 5, 1);}
Wenn du Zeile zeitlich triggerst (z.B. jede Stunde) leuchtet diese Lampe (laut deinem Alogrithmus) von Mitternacht bis 20h am Abend mit ca. 31% der max. Helligkeit.

Also ich triggere nich stunden weise.Es soll schalten
wenn zeit kleiner 4 uhr dann licht auf ca.31% (wenn ich das licht mit dem schalter betätige)

oder diese Zeile! if ($h>=6){FS20_SetIntensity(13191, 16, 1);}
Falls diese Zeile jemals bei dir ausgeführt wurde leuchtet die Lampe durchgehend von 6h bis 20h mit 100%.

In diesem fall wenn Licht nach 6 Uhr angeschaltet wird bitte mit 100%

Und keine sorge ich weis das ich mich nicht immer klar ausdrücke und kann mir kretick gut um . Danke für eure Mühe

Und mein eigentlichens problem ist das mit den Zeitabhängigkeiten irgend etwas nicht stimmte

Ich versteh’ das jetzt so:
Du hast die vier Dimmer (1-4) alle im Wohnzimmer. Und dein Script soll nur diese Lampen schalten, getriggert wird das Script durch die Nachttischlampe.
In diesem Falle wäre es unerheblich die aktuellen Helligkeitsstufen auszuwerten, oder nicht?

Dann probier mal:

<?php

if (($h=(int)date("H"))<4)  {FS20_SetIntensity(13191,  5, 1);} 
if ($h==4) {FS20_SetIntensity(13191,  7, 1);} 
if ($h==5) {FS20_SetIntensity(13191, 13, 1);} 
if ($h>=6) {FS20_SetIntensity(13191, 16, 1);} 

if ($h>=20)  {
   FS20_SetIntensity(60778, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(13624, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(14327, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(13191, 0, 1); 
} 

?>

Günter

Wie ich oben mal erwähnt habe ist es für mich schon wichtig

denn wenn das licht im WZ an is soll er nicht schalten


$h=(int)date("H");
//Früh einen Dimmer nach Zeit mit unterschiedlicher Helligkeit, aber nur wenn alle Dimmer im WZ aus
if( 
$Dimmerwohn1 == 0 and 
$Dimmerwohn2 == 0 and 
$Dimmerwohn3 == 0 and 
$Dimmerwohn4 == 0) 
{ 
if ($h<4)  {FS20_SetIntensity(13191,  5, 1);} 
if ($h==4) {FS20_SetIntensity(13191,  7, 1);} 
if ($h==5) {FS20_SetIntensity(13191, 13, 1);} 
if ($h>=6) {FS20_SetIntensity(13191, 16, 1);} 
}

//abends im Wohnzimmer alles aus
if ($h>=20)  { 
   FS20_SetIntensity(60778, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(13624, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(14327, 0, 1); IPS_Sleep(50); 
   FS20_SetIntensity(13191, 0, 1); 
} 


Ich hoffe nun so gehts…:wink:

MfG Thomas

he Thomas das sieht gut aus ich werds direckt mal in den Test betrieb nehmen
Danke erstmal für eure Hilfe