Frage Scrip If/Vraiable

Ich würde gerne die Variable abfragen „BewegungssensorenDeaktiviert“

Wenn die Variable auf TRUE steht soll der unten ausgeführte Code nicht ausgefürt werden.

Wie kann ich texte ausklammern?


<?
FS20_SwitchDuration(45696 /[Hadware\Schalter\SchalterMobil1]/, true, 300);
?>

===>Bitte:


$BewegungssensorenDeaktiviert = getvalue("BewegungssensorenDeaktiviert");
if($BewegungssensorenDeaktiviert == false)
{
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300);
}

P.S. wobei BewegungssensorenDeaktiviert durch die ID ersetzt werden sollte (ist ja für die V2)

danke funkt

Kann ich jetzt noch eine Zeitsteurung einbauen? bzw. einen Sonnenaufgang und Sonnenuntergangsteurung

$BewegungssensorenDeaktiviert = getvalue("BewegungssensorenDeaktiviert");
if($BewegungssensorenDeaktiviert == false)
{
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300);
}

Auch das stellt für IPS/PHP kein Problem da:


$BewegungssensorenDeaktiviert = getvalue("BewegungssensorenDeaktiviert"); 
$latitude   = (float)52.520198;    // Location of Bundeskanzleramt
$longitude  = (float)13.376005;   // Location of Bundeskanzleramt
$zenit      = (float)90 + 5 / 6;
$timezone   = (float)date('O') / 100;
$SunRise    = date_sunrise($zeit, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
$SunSet     = date_sunset($zeit, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
if (($BewegungssensorenDeaktiviert == false) AND
    (time() >= $SunRise) AND
    (time() <= $SunSet)) 
{ 
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300); 
}  

Die Schaltfunktion wird so nur zwischen Sonnenaufgang und Sonnenuntergang ausgeführt. :smiley:

Zur Berechnung von Sonnenaufgang und Sonnenuntergang benötigt PHP einige Informationen:

  • Längen- und Breitengrad der zu betrachtenden Position (z.B. via GoogleMaps oder GoogleEarth zu ermitteln)
  • Einen Zenit-Korrekturwert (ich wohne auf dem flachen Land und der o.g. Wert hat sich als Praktikabel erwiesen - einfach übernehmen)
  • Die lokale Zeitzone…

Diese Infos sind in den Variablen $latitude, $longitude, $zenit und $timezone hinterlegt.
In den Variablen $SunRise und $SunSet finden sich dann die Standard-Unix Timestamps von Sonnenauf- und Sonnenuntergang. Diese können dann einfach mit dem aktuellen Zeitstempel verglichen werden (time()).

Ach ja, auf der Website PHP: PHP Handbuch - Manual ist das komplette PHP-Handbuch online zu finden. Über die Suchenfunktion oben rechts findet man im allgemeinen alle Infos die notwendig sind (zum großen Teil auf Deutsch, teile sind aber auch nur in Englisch) :wink:

danke für die info. Da ich selten programmier hab ich natürlich mit der suchfunktion selten genau die antworten die ich benötige. Was aber nicht heist das ich nicht versuche meine Fragen vorher selber zu lösen :wink:

Hallo Mathieu

Bitte, gern geschehen.

Ups, wenn ich dir auf die Zehen getreten bin, dann ein großes SORRY :rolleyes: Das war nicht meine Absicht.
Ich dachte nur, da deine Fragen ein wenig rudimentär waren, ob du evtl. gerade erst mit PHP angefangen hast… :slight_smile:

nja ich hab schon so manche php website modifiziert doch so manch grund infos hab ich oft nicht so mitbekommen, und du bist mir nicht auf die zehen gestiegen keine angst, aber ich bin gewon von anderen foren das wenn man sachen frag die allen anderen bekannt sind das mann schnell mal angefahren wird doch die suchfunktion zu nutzen un nicht hundertmal die suchfunktion zu nutzen. :slight_smile:

Hm hab es heut ausführlich ausprobier und es hat doch nicht funktioniert

Das hilft uns so nicht weiter. Erscheit eine Fehlermeldung? Bitte etwas mehr Angaben.

Hallo Mathieu13

die Berechnung von Sonnenauf- und/oder Sonnenuntergang erfordert auch eine Datumsangabe, für welchen Tag die Zeiten berechnet werden sollen. Leider habe ich die entsprechende Stelle aus meinem Quellcode vergessen mit zu kopieren, daher war der Parameter $zeit in den beiden Funktionsaufrufen date_sunrise und date_sunset nicht vorbelegt. Unten mal die korrigierte Fassung (habe die Variable $zeit durch die Funktion time() ersetzt):


$BewegungssensorenDeaktiviert = getvalue("BewegungssensorenDeaktiviert"); 
$latitude   = (float)52.520198;    // Location of Bundeskanzleramt
$longitude  = (float)13.376005;   // Location of Bundeskanzleramt
$zenit      = (float)90 + 5 / 6;
$timezone   = (float)date('O') / 100;
$SunRise    = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
$SunSet     = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
if (($BewegungssensorenDeaktiviert == false) AND
    (time() >= $SunRise) AND
    (time() <= $SunSet)) 
{ 
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300); 
}

So sollte das jetzt aber funktionieren…

hm funkt trotzdem nicht, hab aber auch keine Fehlermeldung es wird einfach nicht ausgeführt

$BewegungssensorenDeaktiviert = getvalue(20824 /*[Variablen\BewegungssensorenDeaktiviert]*/);
$latitude   = (float)48.788720;    // Location Groß Siegharts
$longitude  = (float)15.409480;   // Location Groß Siegharts
$zenit      = (float)90 + 5 / 6;
$timezone   = (float)date('O') / 100;
$SunRise    = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
$SunSet     = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
if (($BewegungssensorenDeaktiviert == False) AND
    (time() >= $SunRise) AND
    (time() <= $SunSet))
{
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300);
}

hab mal die AND aus komentiert hat aber so auch nicht funktioniert kann es sein das dir {} Klammern nicht passen?

Das Script von Thorsten ist meiner Meinung nach OK.

  1. Um welche Uhrzeit hast Du das Script ausgeführt?
  2. Wie hast Du es gestartet bzw. welcher Trigger hat das Script ausgeführt?

Die Klammern gehen so, es können aber die Hälfte weggelassen werden.


if ($BewegungssensorenDeaktiviert == False AND time() >= $SunRise AND time() <= $SunSet)

also ich habe das scrip von der uhrzeit her so 18 - 21 Uhr immer wieder mal probiert

Ausgeführt hab ich es mal mit ausführen in der programierung, bzw auch mehrmals probiert mit dem sensor der als auslösereigniss wenn der sensor anspricht

Das komisch er gibt es mir das ganze als text aus

Die Schaltfunktion wird so nur zwischen Sonnenaufgang und Sonnenuntergang ausgeführt.

Also kann es zwischen 18-21 Uhr bei Dir nicht schalten.

Das komisch er gibt es mir das ganze als text aus

Da sind irgendwo die PHP Kommentierungsbegrenzer falsch gesetzt:


<?
.....Script
?>

Ups dann wurde das falsch verstanden ich will das mein licht nich am tag sondern in der nacht angeht

Dann muß das Script etwas modifiziert werden, da Thorsten hier nur den gleichen Tag berücksichtigt. Werde aber erstmal etwas gegen meinen Hunger machen…:smiley:

ich erwarte es schon ganz unruhig :wink:

Ohne mich näher mit dem Thema befasst zu haben sagt mein Gefühl, dass dies Verdächtig ist:

if ( ... time() >= $SunRise AND time() <= $SunSet) 

Wenn die aktuelle Zeit größer Sonnenaufgang und kleiner Sonnenuntergang (also Tag) ist…

Du willst das Gegenteil, also versuchs als andersrum:

time() <= $SunRise OR time() >= $SunSet

Wenn die aktuelle Zeit kleiner Sonnenaufgang oder größer Sonnenuntergang (also Nacht) ist…

Gruß,

Toni

Um das jetzt noch mal als ganzes zu zeigen, das folgende Skript sollte also für die Nacht funktionieren, wenn es vom Bewegungsmelder getriggert wird:


<?
$BewegungssensorenDeaktiviert = GetValue(20824 /*[Variablen\BewegungssensorenDeaktiviert]*/);
$latitude   = (float)48.788720;    // Location Groß Siegharts
$longitude  = (float)15.409480;   // Location Groß Siegharts
$zenit      = (float)90 + 5 / 6;
$time       = time();
$timezone   = (float)date('O') / 100;
$SunRise    = date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
$SunSet     = date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenit, $timezone);
if ($BewegungssensorenDeaktiviert == False AND ($time <= $SunRise OR $time >= $SunSet)) {
  FS20_SwitchDuration(45696 /*[Hadware\Schalter\SchalterMobil1]*/, true, 300);
}
?>

Wichtig ist hierbei die korrekte Klammerung in der IF-Abfrage, da zwei Bedingungsblöcke mit UND verbunden sind:

  1. Bewegungssensor ist nicht deaktiviert
  2. Es ist vor Sonnenaufgang oder nach Sonnenuntergang

Sollte also so wie oben funktionieren (ich habe jetzt auch mal die PHP-Kommentierungsbegrenzer hinzugefügt).

Danke dafür damit sollte ich auch zukünftige sachen schon besser programieren können, da ich jetzt auch die richtige If setzung habe scrip werd ich mal schon ob es am abend auch funktioniert, am tag schaltet sich es mal nicht ein. Die frage ist ob das mit den Zenit jetzt nicht eine - statt + sein sollte