Problem mit SetvalueBoolean

Hallo,

ich habe mir ein Skript gebastelt, das mir die Mülltermine ausrechnet:

<?
/*
***********************************************************
Berechnet die Müllabfuhrtermine und setzt globale Variablen
***********************************************************
*/


//Datumsformat "KW"

$Kalenderwoche = date("W");

$gelbersack = array("04", "08", "12", "17", "21", "25", "30", "34", "39", "43", "47", "51");
$restmuell = array("02", "04", "06", "08", "10", "12", "14", "16", "18", "20", "22", "24", "26", "28", "30", "32", "34", "36", "38", "40", "42", "44", "46", "48", "50", "52");
$papiertonne = array("04", "08", "12", "16", "21", "25", "30", "34", "38", "43", "48", "51");

if (in_array($Kalenderwoche, $gelbersack)) {
    SetValueBoolean ("GELBERSACK", TRUE);

    echo "Gelbersack!    ";
}
else{
	 SetValueBoolean ("GELBERSACK", FALSE);
	 echo "kein Gelbersack!   ";
}



if (in_array($Kalenderwoche, $restmuell)) {
    SetValueBoolean ("RESTMUELL", TRUE);
	 echo "Restmüll!   ";
}
else{
	 SetValueBoolean ("RESTMUELL", FALSE);
	 echo "kein Restmüll!   ";
}



if (in_array($Kalenderwoche, $papiertonne)) {
    SetValueBoolean ("PAPIERTONNE", TRUE);
    echo "Papiertonne!   ";
}
else{
	 SetValueBoolean ("PAPIERTONNE", FALSE);
	 echo "keine Papiertonne!   ";
}

?>

Die echo-Ausgaben funktionieren richtig, allerdings werden die globalen Variablen nicht gesetzt d.h. verändert. Wenn ich IP-Symcon neu starte funktioniert es genau einmal, danach wieder nicht.

Hat jemand eine Idee??
Danke im Voraus,
koenjoe

Du verwendest IPS2? Dort haben Variablen jetzt IDs.

Gruß,

Toni

Danke für die schnelle Antwort!

wie würde das dann aussehen?

so:



SetValueBoolean (35344  /*[Tagberechnung\RESTMUELL]*/, TRUE);


Gruß
Johannes

Hallo Toni, hallo koenjoe,

dein Problem (keonjoe) hat mir die Lösung gebracht und Toni hat sie beantwortet. Habe IPSV2 seit knapp 10 Tagen am laufen und hatte gestern Stunden herumexperimentiert, um an globale Variablen zu kommen.

Dank dem Hinweis, dass es mit der V2 über die ID geht und dem Beispiel konnte ich nun mein erstes Skript umsetzen.

Thx a lot !!!
Björn
:slight_smile:

Hi,

ich habe es jetzt so geändert:

<?
/*
***********************************************************
Berechnet die Müllabfuhrtermine und setzt globale Variablen
***********************************************************
*/

//Datumsformat "KW"

$Kalenderwoche = date("W");

$gelbersack = array("04", "08", "12", "17", "21", "25", "30", "34", "39", "43", "47", "51");
$restmuell = array("02", "04", "06", "08", "10", "12", "14", "16", "18", "20", "22", "24", "26", "28", "30", "32", "34", "36", "38", "40", "42", "44", "46", "48", "50", "52");
$papiertonne = array("04", "08", "12", "16", "21", "25", "30", "34", "38", "43", "48", "51");

if (in_array($Kalenderwoche, $gelbersack)) {
    SetValue(13982 /*[Tagberechnung\GELBERSACK]*/, TRUE);

    echo "Gelbersack!    ";
}
else{
	 SetValue(13982 /*[Tagberechnung\GELBERSACK]*/, FALSE);
	 echo "kein Gelbersack!   ";
}



if (in_array($Kalenderwoche, $restmuell)) {
    SetValue(35344 /*[Tagberechnung\RESTMUELL]*/, TRUE);
	 echo "Restmüll!   ";
}
else{
	 SetValue(35344 /*[Tagberechnung\RESTMUELL]*/, FALSE);
	 echo "kein Restmüll!   ";
}



if (in_array($Kalenderwoche, $papiertonne)) {
    SetValue(18868 /*[Tagberechnung\PAPIERTONNE]*/, TRUE);
    echo "Papiertonne!   ";
}
else{
	 SetValue(18868 /*[Tagberechnung\PAPIERTONNE]*/, FALSE);
	 echo "keine Papiertonne!   ";
}

?>

Leider kein Erfolg.

Wenn ich IPS beende, das Datum ändere und wieder starte, dann wird es richtig auf die globalen Variablen angewendet. Sonst leider nicht… Aber die echo-Anweisungen funktionieren komischerweise…

Hat jemand noch eine Idee?
Danke im Voraus!
Johannes

Hallo Johannes,

versuche es doch einmal mit SetValueBoolean.

Möglicherweise klappt es dann ja doch noch…

Hallo Johannes,

was soll das große „W“ bewirken ?

$Kalenderwoche = date("w"); 

Habs gefunden.

W ISO-8601 Wochennummer des Jahres, die Woche beginnt am Montag (hinzugefügt in PHP 4.1.0)Beispiel: 42 (die 42 Woche im Jahr)

Dein Script funktioniert bei mir einwandfrei.

Hallo Rainer,

Danke für die Antwort!

„w“ gibt die Wochentagnummer zurück. (Donnerstag = 4, Freitag = 5)
„W“ die aktuelle Kalenderwoche.

Leider funktioniert es immer noch nicht. Ich habe jetzt die Variablen gelöscht und noch einmal neu angelegt --> kein Erfolg.

Hast Du das Skript wiederholt ausgeführt und dazwischen das Datum geändert (um die KW-Abfrage zu prüfen)???

Gruß und Dank
Johannes

Hallo Johannes,

wenn die KW zutrifft, Variable true, ansonsten false.

Du brauchst Doch nur mal die KW zuändern.

Setze doch mal die 05 ein beim Sack.

Warum soll ich das Datum ändern, Du prüfst doch die Kalenderwoche!

Ich habs mal so gemacht, macht aber nur Sinn wenn der Abholtag immer der selbe ist.

$Kalenderwoche = date("W");
$Tag = date("w");

$gelbersack = array("05", "08", "12", "17", "21", "25", "30", "34", "39", "43", "47", "51");
if (in_array($Kalenderwoche, $gelbersack) and ($Tag == 4)) {
    SetValue(38539 /*[Gelbersack]*/, TRUE);
    echo "Gelbersack!";
}
else{
     SetValue(38539 /*[Gelbersack]*/, FALSE);
     echo "kein Gelbersack!";
}

Hallo Johannes,

was erwartest Du eigentlich in Deinen Globalen Variablen zu finden, z.B. in der mit der ID 13982?

Soll dort TRUE oder „Gelbersack !“ stehen?

So wie Du es jetzt eingerichtet hast wirst Du dort nur TRUE oder FALSE finden, aber keinen Text.

Gruß
HJH

Hallo Johannes,

HJH Frage ist nicht unberechtigt.

Hier noch mal mit String Ausgabe und Tag.

$Kalenderwoche = date("W");
$Tag = date("w");
$Tag1 = array("So","Mo","Di","Mi","Do","Fr","Sa");
$gelbersack = array("05", "08", "12", "17", "21", "25", "30", "34", "39", "43", "47", "51");
if (in_array($Kalenderwoche, $gelbersack) and ($Tag == 4)) {
    SetValue(38539 /*[Mülltermine\Gelbersack]*/, TRUE);
  SetValue(47008 /*[Mülltermine\Abholtag]*/,$Tag1[$Tag]." Gelbersack"); //String Variable
    echo "Gelbersack!";
}
else{
     SetValue(38539 /*[Mülltermine\Gelbersack]*/, FALSE);
     SetValue(47008 /*[Mülltermine\Abholtag]*/, "Kein Gelbersack");
     echo "kein Gelbersack!";
}

Danke für eure Mithilfe!

Ich will eigentlich nur, daß sich die Variablen von true auf false oder umgekehrt schalten. Allerdings funktioniert das nicht immer, wenn ich das Datum ändere (oder der Computer das Datum ändert).

Ich lasse das Skript jetzt alle Minuten ausführen, irgendwann funktionierts dann…

Nochmals Danke!
Johannes

Hallo Johannes,

ich denke, Du hast da irgendwo einen Denkfehler.

Ausgewertet wird die KW. Nicht mehr und nicht weniger.

Daraufhin erfolgt deine Auswertung im Script True,False. per Hand(Ausführen) sofern die KW mit dem array übereinstimmt.

Ich lasse das Skript jetzt alle Minuten ausführen, irgendwann funktionierts dann…

Da nur die KW ausschlagebend ist, reicht es einmal die Woche das Script zu triggern und zwar von Sonntag auf Montag. Die KW fängt am Montag an.
Ich kann leider deine Probleme nicht nachvoll ziehen. Nur mit deiner Aussage kann Dir leider auch keiner wirklich weiter helfen.